首页 > 系统相关 >shell流程控制

shell流程控制

时间:2023-05-23 22:33:44浏览次数:28  
标签:bin 控制 shell 示例 流程 number echo test bash

if判断

基本语法

# 单分支
if 判断条件;then
    执行命令
fi

# 双分支
if 判断条件;then
    执行命令
else
    执行命令
fi

# 多分支
if 判断条件;then
    执行命令
elif 判断条件;then
    执行命令
else
    执行命令
fi

代码示例

# 单分支
[root@head test]# cat test.sh 
#!/usr/bin/bash

answer=$((RANDOM %10)) # 随机生成一个10以内的数字
read -p "please enter your number: " number

if [ $number -eq $answer ];then
    echo "you are right"
fi

# 双分支
[root@head test]# cat test.sh 
#!/usr/bin/bash

answer=$((RANDOM %10))
read -p "please enter your number: " number

if [ $number -eq $answer ];then
    echo "you are right"
else
    echo "you are wrong"
fi

# 多分支
#!/usr/bin/bash
  
answer=$((RANDOM %10))
while true
do
        read -p "please enter your number: " number
        if [ "$number" -gt 0 ] 2>/dev/null;then
                if [ $number -eq $answer ];then
                        echo "you are right"
                        exit
                elif [ $number -lt $answer ];then
                        echo "your number is too small"
                else
                        echo "you number is too big"
                fi
        else
                exit
        fi
done

 case判断

基本语法

case 变量 in
模式1)
    命令1
    ;;
模式2)
    命令2
    ;;
模式3)
    命令3
    ;;
*)
    无匹配后执行的命令
esac

代码示例

# 示例一:
[root@head test]# cat test.sh
#!/usr/bin/bash

ARGS=`getopt -o a:b:c: --long aaa:,bbb:,ccc: -n "$0" -- "$@"`
if [ $? -ne 0 ];then
    echo "params error" 
    exit 1
fi
eval set -- "${ARGS}" # 收集参数

while true
do
    case "$1" in 
        -a|--aaa)
            echo "first param: $2"
            aaa=$2
            shift 2 # 作用相当于将上面收集的参数的前两个丢掉,所以下面的参数还是获取的$2
            ;;
        -b|--bbb)
            echo "second param: $2"
            bbb=$2
            shift 2
            ;;
        -c|--ccc)
            echo "third param: $2"
            ccc=$2
            shift 2
            ;;
        --)
            shift
            break
            ;;
        *)
            echo "Internal error"
            exit 1
    esac
done

echo $aaa
echo $bbb
echo $ccc


# 示例二:
[root@head test]# cat test.sh 
#!/usr/bin/bash

case $1 in
    "water"|"rice")
        echo "you are health"
        ;;
    "apple"|"milk")
        echo "you are good"
        ;;
    *)
        echo "you are not good"
        ;;
esac

while和until循环

基本语法

# while 条件为真时一直循环,条件为假时循环结束
while 条件
do
    循环体
done

# until 直到条件为真时才停止循环
until 条件
do
    循环体
done

代码示例

# while循环示例一:
[root@head test]# cat test.sh 
#!/usr/bin/bash

i=0
while (($i<10))
do
    echo $i
    let i++
done

# while循环示例二,读文件:
[root@head test]# cat test.sh 
#!/usr/bin/bash

i=0

while read line 
do
    let i++
    echo "第${i}行:$line"
done</etc/passwd

# until循环示例一:
[root@head test]# cat test.sh 
#!/usr/bin/bash

i=0
until (($i==5)) # 当i增加到5时,跳出循环
do
    let i++
    echo $i
done

for循环

基本语法

for 变量名 in [循环列表]
do
    循环体
done

# for循环默认以空格作为分隔符,可以在脚本中使用IFS指定分隔符,如IFS=$'\n'

代码示例

# for循环示例一,读文件:
[root@head test]# cat test.sh 
#!/usr/bin/bash

i=0
for line in `cat /etc/passwd`
do
    let i++
    echo "第${i}行:$line"
done

# for循环示例二:
[root@head test]# cat test.sh 
#!/usr/bin/bash

for i in {1..10}
do
    if [ $i -eq 5 ];then
        echo "pass"
        continue
    fi
    echo $i
done

# for循环示例三:
[root@head test]# cat test.sh 
#!/usr/bin/bash

for ((i=1;i<10;i++))
do
    echo $i
    if [ $i -eq 5 ];then
        echo "pass"
        break
    fi
done

 

标签:bin,控制,shell,示例,流程,number,echo,test,bash
From: https://www.cnblogs.com/fdsimin/p/17292239.html

相关文章

  • shell基础知识记录
    调式脚本的方式#调试整个脚本执行内容sh-vxtest.sh#不加-v,只显示脚本中运行的代码,不显示注释信息#调试脚本语法是否有问题sh-ntest.sh#调试脚本的一部分,将脚本中需要调试的部分用set-x和set+x包含起来[root@headtest]#cattest.sh#!/usr/bin/bashset-x......
  • shell函数和三剑客
    函数基本语法#写法一:function函数名(){函数要执行的命令}#写法二,省略():function函数名{函数要执行的命令}#写法三,省略function:函数名(){函数要执行的命令}#调用函数#没有参数的函数函数名#有参数的函数函数名参数一参数二函数的......
  • 浅聊springmvc的执行流程
    核心组件是DispatcherServlet,所有的流程都是通过这个组件进行转发的,就好像一个转运中心1、用户发送请求至前端控制器DispatcherServlet。2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生......
  • sentinel(阿里巴巴开源的一款微服务流量控制组件)
    sentinel:分布式系统的流量防卫兵:以流量为切入点,从流量控制、熔断降级、系统负载均衡保护等多个维度保护服务的稳定性sentinel分为两部分:核心库:不依赖任何框架/库,可以运行在所有的java环境,且对Dubbo/springcloud等框架也有较好支持控制台:基于springboot开发,打包后可以直接运......
  • Shell
    shellShell是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Shell脚本是一种为shell编写的脚本程序。Shell编程跟JavaScript、php编......
  • DarkHole_1靶机渗透流程
    VulnHub_DarkHole1靶机渗透流程注意:部署时,靶机的网络连接模式必须和kali一致,让靶机跟kali处于同一网段,这用kali才能扫出靶机的主机1.信息收集1.1探测IP使用nmap扫描同一个段下存活的IPnmap192.168.157.0/24发现192.168.157.138开放了80端口,访问后确认为此次渗透的靶机......
  • Scrum框架和流程
    ​Scrum框架:  Scrum的三个角色:•ProductOwner 产品负责人•ScrumMaster•Developers Scrum的三个工件•产品Backlog•SprintBacklog•产品增量 Scrum的五个活动•产品Backlog梳理•Sprint计划会•每日站会•Sprint评审会•Sprint回顾会 Scrum的五个价值......
  • MySQL多版本并发控制MVCC
    Iwillalwaysbehereforyou目录一,什么是MVCC二,MVCC的具体工作流程三,MVCC在不同隔离级别下的读取规则四,MVCC如何解决幻读五,next-keylock机制的具体实现六,next-keylock机制的优化规则和特殊情况的具体例子 一,什么是MVCCMVCC是多版本并发控制的缩写,是MySQL......
  • Linux shell command make & Makefile All In One
    Linuxshellcommandmake&MakefileAllInOne脚本自动化构建工具make&makefilehttps://linux.xgqfrms.xyz/linux_basic/1010index.htmmake第二十二章、1.3https://linux.xgqfrms.xyz/linux_basic/0520source_code_and_tarball.htm#intro_makemakefile第二十二章、......
  • 仿京东淘宝购物商城手机小程序全套页面业务流程源码
    分享一个仿淘宝京东商城的小程序源码,是使用微信开发者工具开发的,亲测可直接运行。该程序包含了详细完整的框架架构结构,从设计上满足了相关应用服务的设计要求,是一款非常值得学习小程序源码。源码地址项目目录效果预览......