Shell编程——流程控制

Shell编程——流程控制

1、if单分支

单分支

语法格式:

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

或者if和then可以写在同一行,中间用;隔开

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

如果 条件判断式 成立(返回“真”),那么 then 后边的语句将会被执行;如果 条件判断式 不成立(返回“假”),那么不会执行任何语句。最后以fi来结束,正是有了 fi 来结尾,所以即使程序中有多条语句也不需要用{ }包围起来。

使用实例:当变量a的值大于18就输出OK

[root@haoming home]# a=20
[root@haoming home]# if [ $a -gt 18 ];then echo 'OK'; fi 
OK

也可以在判断条件中使用逻辑运算符:

[root@haoming home]# a=20
[root@haoming home]# if [ $a -gt 18 ] && [ $a -lt 36 ];then echo OK; fi
OK

把逻辑运算符写进同一个条件判断式:

  • -a 表示逻辑与(and)

  • -o 表示逻辑或(or)

[root@haoming home]# a=20
[root@haoming home]# if [ $a -gt 18 -a $a -lt 36 ];then echo OK; fi
OK

编写shell文件测试:

#!/bin/bash
read age
read money
if [ $age -gt 30 -a $money -lt 60000 ]
then
    echo "你都成年了,怎么还没存款!" 
fi

执行脚本文件:

[root@haoming home]# ./test1.sh 
40
10000
你都成年了,怎么还没存款!

read 读取控制台的输

语法:

read 选项  参数

选项:

  • -p 该选项会用一段文本来提示用户输入
  • -t 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。如果不指定会一直等待。

参数:

  • 指定读取的变量名

使用实例:

read  -t 10 -p "请输入信息:"  name

2、if多分支

双分支 if else语句

if else 语句语法格式:如果 条件判断式 成立,那么 then 后边的 程序1 语句将会被执行;否则,执行 else 后边的 程序2 语句。

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

编写shell文件测试:

#!/bin/bash
if [ $1 -gt 18 ]
then
    echo "已成年!" 
else
   echo "未成年人禁止观看"
fi

执行脚本文件:

[root@haoming home]# ./test1.sh 15
未成年人禁止观看
[root@haoming home]# ./test1.sh 20
已成年!

多分支 if elif else语句

Shell 支持任意数目的分支,当分支比较多时,可以使用 if elif else 结构,它的格式为:

if [ 条件判断式1 ]
then
  程序1
elif [ 条件判断式2 ]
then
  程序2
elif [ 条件判断式3 ]
then
  程序3
……
else
  程序4
fi

注意,if 和 elif 后边都得跟着 then。

整条语句的执行逻辑为:

  • 如果 条件判断式1 成立,那么就执行 if 后边的 程序1语句;如果 条件判断式1 不成立,那么继续执行 elif,判断 条件判断式2。
  • 如果 条件判断式2 成立,那么就执行 程序2语句;如果 条件判断式2 不成立,那么继续执行后边的 elif,判断 条件判断式3。
  • 如果 条件判断式3 成立,那么就执行程序3语句;如果 条件判断式3 不成立,那么继续执行后边的 elif。
  • 如果所有的 if 和 elif 判断都不成立,就进入最后的 else,执行 程序4语句。

编写shell文件测试:

#!/bin/bash

if [ $1 -le 2 ]; then
    echo "婴儿"
elif [ $1 -ge 3 -a $1 -le 8 ]; then
    echo "幼儿"
elif [ $1 -ge 9 -a  $1 -le 17 ]; then
    echo "少年"
elif [ $1 -ge 18 -a  $1 -le 25 ]; then
    echo "青年"
elif [ $1 -ge 26 -a  $1 -le 40 ]; then
    echo "成年"
elif [ $1 -ge 41 -a  $1 -le 60 ]; then
    echo "中年"
else
    echo "老年"
fi

执行脚本文件:

[root@haoming home]# ./test1.sh 1
婴儿
[root@haoming home]# ./test1.sh 7
幼儿
[root@haoming home]# ./test1.sh 15
少年
[root@haoming home]# ./test1.sh 20
青年
[root@haoming home]# ./test1.sh 30
成年
[root@haoming home]# ./test1.sh 45
中年
[root@haoming home]# ./test1.sh 65
老年

3、case多分支

Shell 支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句。

case in 语句适用场景:分支较多,并且判断条件比较简单。

case in语法格式:

case $变量名  in
    "值1")
       程序1
;;
    "值2")
        程序2
;;
    "值3")
        程序3
;;
    ……
    *)
        程序4
esac

说明:

  • 如果变量和某个值匹配成功,就会执行这后面对应的所有语句,直到遇见双分号;;才停止;然后整个 case 语句就执行完了。

  • 如果 变量没有匹配到任何一个值,就会执行*)后面的语句,直到遇见双分号;;或者esac才结束。*)相当于多个 if 分支语句中最后的 else 部分。最后一个分支可以写;;,也可以不写,因为无论如何,执行到 esac 都会结束整个 case in 语句。

注意事项:

  • case行尾必须是 in,每一个模式匹配必须以 )结束

  • 这里的;;*)就相当于Java中的 break 和 default。

编写shell文件测试:

#!/bin/bash
  
case $1 in
    1)
        echo "Monday"
;;
    2)
        echo "Tuesday"
;;
    3)
        echo "Wednesday"
;;
    4)
        echo "Thursday"
;;
    5)
        echo "Friday"
;;
    6)
        echo "Saturday"
;;
    7)
        echo "Sunday"
;;
    *)
        echo "error"
esac

执行脚本文件:

[root@haoming home]# ./test1.sh 2
Tuesday
[root@haoming home]# ./test1.sh 6
Saturday
[root@haoming home]# ./test1.sh 10
error

4、for循环

Shell中 for 循环有两种使用形式,一种是C语言形式;另一种是Python形式

一、C语言形式

C语言形式 for 循环语法格式如下:

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

编写shell文件测试:进行累加操作

#!/bin/bash
sum=0
for ((i=1; i<=$1; i++))
do
  ((sum+=i))
done
echo "sum=$sum"

执行脚本文件:

[root@haoming home]# ./test1.sh 10
sum=55
[root@haoming home]# ./test1.sh 100
sum=5050
[root@haoming home]# ./test1.sh 1000
sum=500500

二、Python形式

Python形式for 循环语法格式如下:每次循环都会从in后面的取值列表中取出一个值赋给变量,然后进入循环体,执行循环体中的 程序。直到取完取值列表中的所有值,for循环就结束了。

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

编写shell文件测试:取值列表为 1 2 3 4 5

#!/bin/bash
sum=0
for x in 1 2 3 4 5 
do
 ((sum+=x))
done
echo "sum=$sum"

执行脚本文件:

[root@haoming home]# ./test1.sh
sum=15

取值列表可以直接给出具体的值(如 1 2 3 4 5 ),也可以给出一个范围,如下:取值列表为{1…100}

#!/bin/bash
sum=0
for x in {
    
    1..100} 
do
 ((sum+=x))
done
echo "sum=$sum"

5、while循环

当判断条件满足时,while 重复地执行一组语句,当条件不满足时,就退出 while 循环。

while循环语法格式:

while ((判断条件式))
do
   程序
done

编写shell文件测试:取值列表为 1 2 3 4 5

#!/bin/bash
read a
read b
sum=0
while (($a <= $b)) 
do
   ((sum+=a))
   ((a++)) 
done
echo "sum=$sum"

执行脚本文件:

[root@haoming home]# ./test1.sh
1
10
sum=55

猜你喜欢

转载自blog.csdn.net/wpc2018/article/details/125281255