8.shell流程控制(if else-if else判断,for循环,while语句,无限循环,until循环,case匹配,break-continue跳出循环等)

1.if else-if else判断

 if else-if else在shell中,格式同Java中还是有点区别的。具体格式是啥也就不说了,直接上demo,一看就知道了

#!/bin/bash
a=16 b=15
#1.if-else判断(使用[ ]来实现)
if [ ${a} -eq ${b} ]
then
    echo "a等于b"
else
    echo "a不等于b"
fi

#2.if else-if else判断(使用test来实现)
if test ${a} -gt 100
then
    echo "a大于100"
elif test ${a} -le ${b}
then
    echo "a小于等于b"
else
    echo "两个条件都不满足"
fi
#################################
区别:1.shell中写法有所变法,是:elif
     2.shell中if,if else,if elif else结束时,都必须加fi来确认循环结束(末尾的fi就是if倒过来拼写)
     3.写成一行的话,需要加分号;隔开.
      eg:if [ ${a} -eq ${b} ];then echo "a等于b";else echo "a不等于b";fi

2.for循环

#!/bin/bash
#4.for循环
city_arr=("Beijing" "Shanghai" "Guangzhou" "Shenzhen" "Taiyuan")
for city in ${city_arr[@]}
do
    echo ${city}
done

#来回顾一下接受参数$*,加引号的区别。参考:https://blog.csdn.net/lzb348110175/article/details/89972807
for str in "$*"
do
    echo ${str}
done

#来回顾一下接受参数$@,加引号的区别。参考:https://blog.csdn.net/lzb348110175/article/details/89972807
for str in "$@"
do
    echo ${str}
done
#################################
注意:1.要使用do,done等关键字
     2.一行来写for循环
      eg:for city in ${city_arr[@]};do echo ${city};done;

  结果如下:

8.shell流程控制(if else-if else判断,for循环,while语句,无限循环,until循环,case匹配,break-continue跳出循环等)_第1张图片

3.while语句

#!/bin/bash
#6.while语句
a=15
while test ${a}<50
do
   echo ${a}
   let "a++"
done;
#######################################
注意:1.while紧跟的条件需要使用双括号(()),中括号或者双中括号无效
     2.也是用到do,done关键字
     3.此例中使用了Bash的let命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
     4.let命令,可参考:https://www.runoob.com/linux/linux-comm-let.html

  *****while循环可用于读取键盘信息(read关键字)

   参考:https://www.cnblogs.com/lottu/p/3962921.html

echo -n '输入你最喜欢的网站名: '
while read FILM
do
    echo "是的!$FILM 是一个好网站"
done

4.无限循环(3种情形)

#1.while                  #2.while true            #3.for循环
while :                   while true               for (( ; ; ))
do                        do
    command                   command
done                      done

5.until循环

    until 循环执行一系列命令直至条件为 true 时停止。

    until 循环与 while 循环在处理方式上刚好相反

    一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

#!/bin/bash
#需求:当num<10时,跳出循环
num=15
until test ${num} -lt 10
do
    echo "我现在是${num},还大于等于10,,还没跳出循环"
    num=`expr ${num} - 1`     #等价于:let num--
done;

6.case匹配

    Shell case语句为多选择语句,其实与①Java中的switch-case语法  ②sql中的case-when语法的使用一致 

    通过实例来瞅一瞅case语法

#!/bin/bash
#需求:
#    1.while循环可用于读取键盘信息
#    2.根据输入的信息,然后提示你输入的名字;匹配成功则正常输出,匹配失败,则:提示'你输入了其他名字'
#    3.使用while true死循环
#    4.使用case语法做判断
while true
echo '---------------------------'
echo '请输入你的名字'
read name
do
    case ${name} in
        'Mary') echo '你输入了Mary'
        ;;
        'Lucy') echo '你输入了Lucy'
        ;;
        'Bob') echo '你输入了Bob'
        ;;
        *) echo '你输入了其他名字'
        ;;
    esac
done

#通过实例,来解析case语法的一些规则:
###1.取值后面必须为单词in      
###2.每一模式必须以右括号结束 
###3.取值可以为变量或常数
###4.匹配成功执行,直到遇到;;才会结束 ;;相当于Java中的break;
###5.所有都没有匹配到,使用星号 * 捕获该值.相当于Java中的default;
###6.执行完成,需要通过esac来结束(case的反转,与if需要fi来结束类似)

7.跳出循环

    shell中跳出循环,用到的也是breakcontinue两个关键字,两个关键字的用法与在java中的用法一模一样。

    break:跳出所有循环 

#!/bin/bash
#需求:还是上一个例子,当输入名称不是Mary,Lucy,Bob这三个的时候,在*)中通过break跳出循环
while true
echo '---------------------------'
echo '请输入你的名字'
read name
do
    case ${name} in
        Mary) echo '你输入了Mary'
        ;;
        Lucy) echo '你输入了Lucy'
        ;;
        Bob) echo '你输入了Bob'
        ;;
        *) echo '你输入了其他名字,执行break跳出,当前循环结束'
        break
        echo 'break后的语句不会执行'
        ;;
    esac
done

   结果:

8.shell流程控制(if else-if else判断,for循环,while语句,无限循环,until循环,case匹配,break-continue跳出循环等)_第2张图片

    continue:跳出当前执行的循环

#!/bin/bash
while true
echo '---------------------------'
echo '请输入你的名字'
read name
do
    case ${name} in
        'Mary') echo '你输入了Mary'
        ;;
        'Lucy') echo '你输入了Lucy'
        ;;
        'Bob') echo '你输入了Bob'
        ;;
        *) echo '你输入了其他名字,执行continue,跳出当前循环'
        continue
        echo '执行contiune命令后,这条语句不会输出'
        ;;
    esac
done

结果: 

8.shell流程控制(if else-if else判断,for循环,while语句,无限循环,until循环,case匹配,break-continue跳出循环等)_第3张图片

结果比较:break直接跳出了整个while true循环,break后面的命令 不会执行

                 continue只是跳出了当前的case语句,continue后面的命令也不会执行

 

本文仅用作:学习笔记 

部分参考自:https://www.runoob.com/linux/linux-shell-process-control.html

如有错误,欢迎纠正,谢谢

你可能感兴趣的:(Shell基础)