linux之shell快速入门系列<5> | shell流程控制if、case、for、while轻松弄懂

Shell流程控制

流程控制无论在什么编程语言中都是非常重要的一部分,掌握编程语言的流程控制语句可以为我们编写代码减轻极大的负担!接下来,我们一起看看Shell脚本中的流程控制语法!


为什么我们要掌握流程控制的语法?

当我们做一些判断的时候,对于简单的我们可以使用三目运算符来满足我们的需求,如:
x = 6
y = 2
z = x>y ? x-y : x+y;
可当我们需要进行一些更加复杂的判断时三目运算符就显得力不从心了,因此我们掌握流程控制语法就显得非常关键了。尤其是我们需要重复进行一些具有相同特征的计算(打印九九乘法表、计算1-100的和)等,这时循环就为我们减轻了非常大的麻烦!

一、if判断语句

  1. 基本语法

    if [ 条件判断式 ];then 
      程序 
    fi 
    或者 
    if [ 条件判断式 ] 
      then 
        程序 
    fi
    

    注意事项:
    (1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
    (2)if后要有空格

  2. 案例操作
    (1)测试:输入一个数字,如果是y,则输出I am true,如果是n,则输出I am false,如果是其它,什么也不输出。

    [root@bigdata01 centos-shell]# vi if.sh

    #! /bin/bash
    
    #下面编写if判断语句的使用方法
    if [ $1=='y' ]
      then
            echo "i am true"
    elif [ $1 == 'n' ]
      then
            echo "i am false"
    fi
    

    执行结果:

    [root@bigdata01 centos-shell]# chmod 777 if.sh
    [root@bigdata01 centos-shell]# ./if.sh y
    i am true
    [root@bigdata01 centos-shell]# ./if.sh n
    i am true
    

    (2)测试:输入一个成绩,[100,80]输出优异,(80,60],输出及格,雄小于60,输出你需要补考。输入数据不在1-100范围,输出“你的输入有误;请重新输入0-100之间的整数”
    [root@bigdata01 centos-shell]# vi if.sh

    #! /bin/bash
    echo  -n "请输入您的分数(0-100整数):"
    read num
    if (( $num<=100&&$num>=80 ))
      then
            echo "成绩优异"  ;
    elif (( $num<80&&$num>60 ))
      then
            echo "成绩合格" ;
    elif (( $num==60 ))
      then
            echo "及格万岁" ;
    elif (( $num<60&&$num>=0 ))
      then
            echo "你需要补考"
    else echo "你的输入有误;请重新输入0-100之间的整数"
    fi
    

    执行结果:

    [root@bigdata01 centos-shell]# ./if.sh
    请输入您的分数(0-100整数):100
    成绩优异
    [root@bigdata01 centos-shell]# ./if.sh
    请输入您的分数(0-100整数):68
    成绩合格
    [root@bigdata01 centos-shell]# ./if.sh
    请输入您的分数(0-100整数):56
    你需要补考
    [root@bigdata01 centos-shell]# ./if.sh
    请输入您的分数(0-100整数):123
    你的输入有误;请重新输入0-100之间的整数
    

2、case 语句

  1. 基本语法

    case $变量名 in 
      "值1") 
        如果变量的值等于值1,则执行程序1 
        ;; 
      "值2") 
        如果变量的值等于值2,则执行程序2 
        ;; 
      …省略其他分支… 
      *) 
        如果变量的值都不是以上的值,则执行此程序 
        ;; 
    esac
    

    注意事项:

    1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
    2)双分号“;;”表示命令序列结束,相当于java中的break。
    3)最后的“*)”表示默认模式,相当于java中的default。
    
  2. 案例实操
    (1)输入一个数字,如果是1,则输出“今天天气真不错”,如果是2,则输出“蚂蚁搬家”,如果是其它,输出“今天没啥”。

    #! /bin/bash
    
    case $1 in
    "1"){
            echo "今天天气真不错"
    };;
    "2"){
            echo "蚂蚁搬家"
    };;
    *){
            echo "今天没啥"
    };;
    esac
    

    执行结果:

    [root@bigdata01 centos-shell]# ./case.sh
    今天没啥
    [root@bigdata01 centos-shell]# ./case.sh 1
    今天天气真不错
    [root@bigdata01 centos-shell]# ./case.sh 2
    蚂蚁搬家
    

3、for 循环

  1. 基本语法1

    for (( 初始值;循环控制条件;变量变化 )) 
      do 
        程序 
      done
    
  2. 案例实操
    (1)从1加到100

    [root@bigdata01 centos-shell]# cat for2.sh
    #! /bin/bash
    sum=0
    for ((i=1;i<=100;i++))
    do
            sum=$[$sum+$i]
    done
    echo $sum
    

    执行结果:

    [root@bigdata01 centos-shell]# ./for2.sh
    5050
    
    

    (2)打印九九乘法表

    #! /bin/bash
    
    for (( i=1;i<=9;i++ ))
     do
      for (( j=1;j<=9;j++ ))
       do
            [ $j -le $i ] && echo -n "${i} * ${j}=$((i*j)) "
       done
       echo ""
    done
    

    执行结果

    [root@bigdata01 centos-shell]# ./for.sh
    1 * 1=1
    2 * 1=2 2 * 2=4
    3 * 1=3 3 * 2=6 3 * 3=9
    4 * 1=4 4 * 2=8 4 * 3=12 4 * 4=16
    5 * 1=5 5 * 2=10 5 * 3=15 5 * 4=20 5 * 5=25
    6 * 1=6 6 * 2=12 6 * 3=18 6 * 4=24 6 * 5=30 6 * 6=36
    7 * 1=7 7 * 2=14 7 * 3=21 7 * 4=28 7 * 5=35 7 * 6=42 7 * 7=49
    8 * 1=8 8 * 2=16 8 * 3=24 8 * 4=32 8 * 5=40 8 * 6=48 8 * 7=56 8 * 8=64
    9 * 1=9 9 * 2=18 9 * 3=27 9 * 4=36 9 * 5=45 9 * 6=54 9 * 7=63 9 * 8=72 9 * 9=81
    
  3. 基本语法2

    for 变量 in 值1 值2 值3… 
     do 
       程序 
     done
    

    案例实操
    (1)打印所有输入参数

    [root@bigdata01 centos-shell]# cat for3.sh
    #! /bin/bash
    
    for i in $*
    do
            echo $i
    done
    

    执行结果:

    [root@bigdata01 centos-shell]# ./for3.sh 1 2 3 4 5 6
    1
    2
    3
    4
    5
    6
    

    (2)比较 ∗ 和 *和 @区别
    (a) ∗ 和 *和 @都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1

    [root@bigdata01 centos-shell]# cat for4.sh
    #! /bin/bash
    
    for i in $*
    do
            echo "I Love $i"
    done
    
    for j in $@
    do
            echo "I Love $j"
    done
    

    执行结果:

    [root@bigdata01 centos-shell]# ./for4.sh Guizhou Yunnan Anhui Beijing
    I Love Guizhou
    I Love Yunnan
    I Love Anhui
    I Love Beijing
    I Love Guizhou
    I Love Yunnan
    I Love Anhui
    I Love Beijing
    

    (b)当它们被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 2 … 2 … 2n”的形式输出所有参数;“$@”会将各个参数分开,以“$1” “ 2 ” … ” 2”…” 2n”的形式输出所有参数。

    [root@bigdata01 centos-shell]# cat for4.sh
    #! /bin/bash
    
    for i in "$*"
    do
            echo "I Love $i"
    done
    
    for j in "$@"
    do
            echo "I Love $j"
    done
    

    执行结果:

    [root@bigdata01 centos-shell]# ./for4.sh Guizhou Yunnan Anhui Beijing
    I Love Guizhou Yunnan Anhui Beijing
    I Love Guizhou
    I Love Yunnan
    I Love Anhui
    I Love Beijing
    

while 循环

  1. 基本语法
    while [ 条件判断式 ] 
      do 
        程序
      done
    
  2. 案例实操
    (1)从1加到100
    [root@bigdata01 centos-shell]# cat while.sh
    #! /bin/bash
    
    i=1
    sum=0
    while [ $i -le 100 ]
    do
            sum=$[$sum+$i]
            i=$[$i+1]
    done
    echo $sum
    
    执行结果:
    [root@bigdata01 centos-shell]# ./while.sh
    5050
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

似懂非dong

你的肯定使我加倍努力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值