day14 02-Shell控制条件与循环详解

文章目录

        • 1.9. 条件控制
          • 1.9.1. if条件语句-单分支
          • 1.9.2. if条件语句-多分支
          • 1.9.3. case
        • 1.10. 循环
          • 1.10.1. for循环
          • 1.10.2. while循环

1.9. 条件控制
1.9.1. if条件语句-单分支
if-else语句,是非常简单,也是非常基础的条件语句。在Java中我们已经非常熟悉它的逻辑了,在这里,我们重点关注在Shell中的语法
if [ 条件判断 ]
then
    条件成立的执行逻辑
fi

或者

if [ 条件判断 ] ; then
    条件成立的执行逻辑
fi

案例:

#!/bin/bash

A=$1
if [ $A == "stop" ]
then
    systemctl stop firewalld
fi

注意事项:

  1. if语句需要使用fi结尾,和一般语言使用大括号结尾不同。
  2. [ 条件判断 ] 就是使用test命令判断,所以中括号和条件判断之间必须有空格
  3. then后面跟符合条件之后执行的程序,可以放在[]之后,用;分隔,也可以换行写入,就不需要;了
  4. if与中括号之间必须要有空格
1.9.2. if条件语句-多分支
if [ 条件判断式1]
then
      当条件判断式1成立时,执行程序1
elif  [ 条件判断式2 ]  
then      
    当条件判断式2成立时,执行程序2
      ...省略更多条件
else
      当所有条件都不成立时,最后执行此程序
fi

案例1:

#!/bin/bash
read -p "please input your name:"  NAME
echo  $NAME
if [ $NAME == root ]
then
      echo "hello ${NAME},  welcome !"
elif [ $NAME == tom ]
then
    echo "hello ${NAME},  welcome !"
else
    echo "oh, get out here !"
fi

案例2:

编写一个坐车脚本,要求:
脚本名字: home.sh
逻辑: 从外面传入一个参数,根据参数判断: 1. 坐飞机,2. 坐火车,3. 坐火箭,4. 不回了
#!/bin/bash

CHOICE=$1
if [ $CHOICE == 1 ]
then
    echo "坐飞机"
elif [ $CHOICE == 2 ]
then
        echo "坐火车"
elif [ $CHOICE == 3 ]
then
    echo "坐火箭"
elif [ $CHOICE == 4 ]
then
    echo "不回了"
else
    echo "输入的参数有问题啊"
fi
1.9.3. case
# 在Java中,我们学习过switch-case结构。这种结构,我们可以捕获一个变量的值,对这个变量取到的某些值进行不同的处理。在Shell中,也有类似的结构,就是case。
# case命令是一个多分支的if/else命令,case变量的值用来匹配value1、value2、value3等不同的值。
# 匹配到后,则执行跟在后面的命令,直到遇到双分号为止。
# 类似于if命令,case命令使用esac作为终止符。
# case行尾必须为单词in。
# 每个分支必须以右括号结束。
# 匹配模式中可使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
# 最后的“\*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后的命令序列。

# case的格式

CMD=$1
case $CMD in							# case行尾必须为 变量 in,表示捕获这个变量的值
start)									# 需要匹配到的值,需要以右括号作为结尾
    echo "starting"						# 匹配到之后,执行的逻辑语句,即一个分支
    ;;									# 一个分支的逻辑,需要以;;作为结束,不会向下穿透
stop)
    echo "stopping"
    ;;
*)										# *表示以上分支都不满足的情况,类似于switch-case中的default
    echo "please using start|stop"
    ;;
esac									# case语句,需要以esac结束
1.10. 循环
1.10.1. for循环
for循环命令用来在一个列表条目中执行有限次数的命令。

比如,你可能会在一个姓名列表或文件列表中循环执行同个命令。

for命令后紧跟一个自定义变量、一个关键字in和一个字符串列表(可以是变量)。

第一次执行for循环时,字符串列表中的第一个字符串会赋值给自定义变量,然后执行循环命令,直到遇到done语句;

第二次执行for循环时,会右推字符串列表中的第二个字符串给自定义变量

依次类推,直到字符串列表遍历完。

方式一:

for N in 1 2 3 
do
      echo $N
donefor N in 1 2 3; do echo $N; donefor N in {1..3}; do echo $N; donefor N in {1,2,3}; do echo $N; done  

注意事项: {}中的数字之间不能有空格

方式二:

for ((i = 0; i <= 5; i++))
do
      echo "welcome $i times"
donefor ((i = 0; i <= 5; i++)); do echo "welcome $i times"; done

练习: 计算从1到100的和

#!/bin/bash

SUM=0
for((i=1;i<=100;i++))
do
    SUM=$(($SUM + $i))
done
echo $SUM
1.10.2. while循环
while命令根据紧跟其后的命令(command)来判断是否执行while循环,当command执行后的返回值(exit status)为0时,则执行while循环语句块,直到遇到done语句,然后再返回到while命令,判断command的返回值,当得到返回值为非0时,则终止while循环。
  • 第一种:

    while [ expression ]
    do
        command
    done
    
    # 练习: 求1-10各个数字的平方和
    
    #!/bin/bash
    num=1
    while [ $num -le 10 ]
    do
          sum=`expr $num \* $num`
          echo $sum
          num=`expr $num + 1`
    done
    
    num=1
    while [ $num -le 10 ]
    do
          sum=$(( $num * $num ))
          echo $sum
          num=$(( $num + 1 ))
    done
    
  • 第二种:

    while  ((  expression  ))
    do
    commanddone
    
    # 练习: 求1-10各个数字的平方和
    
    #!/bin/bash
    i=1
    while (( i<= 10 ))
    do
        sum=$(( $i * $i ))
        echo $sum
        i=$(( $i + 1 ))
    done
    

你可能感兴趣的:(全链路数据仓库,Shell,shell循环,shell控制条件,shell,if,else,shell,if,shell,for,shell,while)