Linux Shell编程之流程控制

在这里插入图片描述

Shell 流程控制

shell也可以像其他语言一样,有流程控制。shell的流程控制一般包括

  • if判断。
  • for循环
  • while循环
  • until
  • case

1、if判断

shell的if判断语句有三种语法,分别为

  • if判断
  • if~else判断
  • if~else if~else判断

1.1、简单的if判断

if语法

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

案例

编写一个程序,当输入分数时判断是否及格

[root@root test02]# vim test01.sh 
read -p "请输出您的成绩:source=" grade
if [ $grade -ge 60 ]
then
   echo "您的成绩为$grade,及格了"
fi
[root@root test02]# chmod +x ./test01.sh 
[root@root test02]# ./test01.sh 
请输出您的成绩:source=99
您的成绩为99,及格了

1.2、if~else判断

if~else语法

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

案例

[root@root test02]# vim test01.sh 
read -p "请输出您的成绩:source=" grade
if [ $grade -ge 60 ]
then
   echo "您的成绩为$grade,及格了"
else
   echo "您的成绩为$grade,小于及格线(60)"
fi
[root@root test02]# ./test01.sh 
请输出您的成绩:source=59
您的成绩为59,小于及格线(60)

1.2、if~else if~else判断

if~else if~else语法

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

案例

[root@root test02]# vim test01.sh 

read -p "请输出您的成绩:source=" grade
if [ $grade -ge 90 ]
then
   echo "您的成绩为$grade,优秀"
elif [ $grade -ge 80 -a $grade -lt 90 ] 
then
   echo "您的成绩为$grade,良好"
elif [ $grade -ge 70 -a $grade -lt 80 ] 
then
   echo "您的成绩为$grade,中等"
elif [ $grade -ge 60 -a $grade -lt 70 ] 
then
   echo "您的成绩为$grade,及格"
else
   echo "您的成绩为$grade,没达到及格线"
fi
[root@root test02]# ./test01.sh 
请输出您的成绩:source=56
您的成绩为56,没达到及格线
[root@root test02]# ./test01.sh 
请输出您的成绩:source=78
您的成绩为78,中等

2、case~esac多选择

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构。

语法

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

  • 每个 case 分支用右圆括号开始,用两个冒号;;表示 break。
  • $变量名也就是值。
  • 取值后面必须为单词 in,每一模式(值1,值2…)必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,以;;为一个程序,即以;;结束一种模式。
  • *)表示没有匹配的值,此时就执行该条语句。

案例

根据输入的月份选择季度

[root@root test02]# vim test01.sh 

echo “按月选择季度”
read -p "请输入数字(1-12):num=" num
case $num in
   1|2|3)
   echo "第一季度"
   ;;
   4|5|6)
   echo "第二季度"
   ;;
   7|8|9)
   echo "第三季度"
   ;;
   10|11|12)
   echo "第四季度"
   ;;
   *)
   echo "输入错误,注输入的数字必须在1-12之间"
   ;;
esac
[root@root test02]# ./test01.sh 
“按月选择季度”
请输入数字(1-12):num=5
第二季度
[root@root test02]# ./test01.sh 
“按月选择季度”
请输入数字(1-12):num=13
输入错误,注输入的数字必须在1-12之间

break和continue的区别

break跳出整个循环

continue跳出当前循环

3、for循环

Shell与其他编程语言类似也支持for循环,即执行一次所有命令

3.3、基本for循环

基本语法

for 变 量 in123do
​   程序
donefor 变 量 in123;do 程序;done;

  • in 列表可以包含字符串和文件名。
  • in列表是可选的,如果不用它,for循环使用命令行的位置参数。

案例

顺序打印出1-4

[root@root test02]# vim test01.sh 
for i in 1 2 3 4
do
   echo "the num is $i"
done
[root@root test02]# ./test01.sh 
the num is 1
the num is 2
the num is 3
the num is 4
#或者用一行表示法
[root@root test02]# vim test01.sh 
for i in 1 2 3 4;do echo "The num is $i";done;
[root@root test02]# ./test01.sh 
the num is 1
the num is 2
the num is 3
the num is 4

3.4、增强for循环

增强语法

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

案例

计算1-100的和

[root@root test02]# vim test01.sh 

sum=0
for((i=0;i<=100;i++))
do
    sum=$[ $sum + $i]
done
echo "1-100的和为:total=$sum"
[root@root test02]# ./test01.sh 
1-100的和为:total=5050

4、while循环

Shell与其他编程语言类似也支持while循环,即执行多次所有命令

语法

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

  • 当 条件判断式为true时,此时为死循环,即无限循环下去;
  • 当 条件判断式为空格:时,此时为死循环,即无限循环下去;

案例

10秒倒计时

[root@root test02]# vim test01.sh 

i=10
echo "10秒倒计时开始"
while(( $i<=0 ))
do 
    echo $i
    let "i--"
done
echo "10秒倒计时结束"
[root@root test02]# ./test01.sh 
10秒倒计时开始
10
9
8
7
6
5
4
3
2
1
0
10秒倒计时结束

2.无限循环

i=0
while :
do
   echo "无限叠加$(i++)"
done


5、until循环

Shell中的until也是一种循环,这种循环与我们平时见到的循环不同,它是特指当判断的条件为假时,才执行循环体的中程序。

语法

until [条件表达式]
do
 ​   程序
done

  • 只有当条件表达式为false时,才采用循环体
  • 执行顺序与while相反
  • 一般情况下优先级低于while循环,但有时会高于while循环

案例

10秒倒计时

[root@root test02]# vim test01.sh 

i=10
echo "10秒倒计时开始"
until(( $i<0 ))
do
    echo $i
    let "i--"
done
echo "10秒倒计时结束"

[root@root test02]# ./test01.sh 
10秒倒计时开始
10
9
8
7
6
5
4
3
2
1
0
10秒倒计时结束

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值