【shell篇】流程控制。if判断,case语句,for循环,while循环,until 循环,无限循环,跳出循环,break,continue,

流程控制

1. if判断

1.1 基本语法

if else

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

或者

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

if else-if else

if [ 条件判断式 ];then
	程序
elif [ 条件判断式 ];then
	程序
else
	程序
fi

注意事项:

(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格。

(2)if或elif后要有空格

1.2 实操案例

a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

输出结果:

a 小于 b

1.3 扩展

if else 语句经常与 test 命令结合使用,如下所示:

num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
    echo '两个数字相等!'
else
    echo '两个数字不相等!'
fi

输出结果:

两个数字相等!

2. case语句

2.1 基本语法

case $变量名 in
"值1")
	如果变量的值等于1,则执行
;;
"值2")
	如果变量的值等于2,则执行
;;
*)
	如果变量的值都无法匹配,则执行
;;
esac

注意事项:

(1)case行尾必须为单词“in”

(2)每一个模式匹配必须以英文右括号 ) 结束。

(3)双分号" ;; "表示命令序列结束,相当于java中的break。

(4)最后的"*)"表示默认模式,相当于java中的default。

2.2 实操案例

输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。

[root@jiangnan data]# vi if3.sh
[root@jiangnan data]# cat if3.sh 
#!/bin/bash
case $1 in
"1")
	echo "banzhang"
;;
"2")
	echo "cls"
;;
*)
	echo "renyao"
;;
esac
[root@jiangnan data]# sh if3.sh 1
banzhang
[root@jiangnan data]# 

类比java中的switch…case语法

3. for循环

3.1 语法格式1

for var in item1 item2 ... itemN
do
   程序
done

3.2 语法格式2

for ((初始值;循环控制条件;变量变化)) 
do 
   程序
done

3.3 实操案例1

for var in 1 2 3 4 5
do
    echo "The value is: $var"
done

输出结果:

The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

3.4实操案例2

从1加到100

[root@jiangnan data]# vi for1.sh
[root@jiangnan data]# cat for1.sh 
#!/bin/bash
s=0
for ((i=0;i<=100;i++))
do
	s=$[$s+$i]
done
echo $s
[root@jiangnan data]# sh for1.sh 
5050
[root@jiangnan data]# 

注意:我们在之前的文章中说过了在使用for循环时带参数的情况,注意$@和$*的区别,可以看我之前的文章https://blog.csdn.net/weixin_45842494/article/details/123490655

4. while循环

4.1 基本语法

while [ 条件判断式 ]
do
	程序
done

4.2 实操案例

从1加到100

[root@jiangnan data]# vi while.sh
[root@jiangnan data]# cat while.sh 
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
	s=$[$s+$i]
	i=$[$i+1]
done
echo $s
[root@jiangnan data]# sh while.sh 
5050
[root@jiangnan data]# 

5. until 循环

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

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

5.1 基本语法

until [ 条件判断式 ]
do
	程序
done

5.2 实操案例

从1到100求和

[root@jiangnan data]# vi until.sh 
[root@jiangnan data]# cat until.sh 
#!/bin/bash
a=0
s=0
until [ ! $a -le 100 ]
do
	s=$[$s+$a]
	a=$[$a+1]
done
echo $s
[root@jiangnan data]# sh until.sh 
5050
[root@jiangnan data]# 

6. 无限循环

6.1 基本语法

while :
do
	程序
done

或者

while true
do
	程序
done

或者

for (( ; ; ))
do
	程序
done

6.1 实操案例

[root@jiangnan data]# vi for2.sh 
[root@jiangnan data]# cat for2.sh 
#!/bin/bash
for (( ; ; ))
do 
	echo "I love China"
done
[root@jiangnan data]# sh for2.sh
I love China
I love China
I love China
......

7. 跳出循环

在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。

7.1 break命令

break命令允许跳出所有循环(终止执行后面的所有循环)。

下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done

执行以上代码,输出结果为:

输入 15 之间的数字:3
你输入的数字为 3!
输入 15 之间的数字:7
你输入的数字不是 15 之间的! 游戏结束

7.2 continue命令

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。

对上面的例子进行修改:

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo “游戏结束” 永远不会被执行。

类比java中的break和continue

微信公众号先已开通,搜索 “江小南和他的小伙伴们” 就能找到我哦,各位小伙伴们可以关注一下,文章会进行同步更新,方便查看哦。

猜你喜欢

转载自blog.csdn.net/weixin_45842494/article/details/123697154