Shell_06_判断和循环
判断
if
条件判断语句:根据条件进行判断并执行对应的命令
指令格式:
if [ 条件1 ];then
程序段1
elif [ 条件2 ];then
程序段2
else
程序段3
fi
1)if和fi总是成对出现(代表判断语句的开始和结束);
2)判断语句可嵌套使用;
3)当一个判断语句含有多个相同层级if或elif时,则只有第一个条件返回的状态码为0的语句会被执行(若层级不相同,则可运行多个)
1)条件成立,运行then后跟的程序段(反之,运行else后跟的程序段)
//根据条件返回的状态码判断是否成立(0为成立,其他均为失败)
2)条件左右两边必须加空格,否则无法识别条件;
3)也可执行指定命令作为条件,但运行结果会显示在终端
如:通过条件判断语句,判断当前用户的家目录和指定文件是否存在
1)编写test5.sh脚本文件
2)调用test5.sh脚本文件
如:通过条件判断语句,检查拥有家目录却不存在的用户和没有家目录的用户
1)编写test6.sh脚本文件
2)调用test6.sh脚本文件
case
内容判断语句:根据变量内容进行判断并执行对应的命令
指令格式:
case ${变量名} in
“变量内容1”)
程序段1
;;
“变量内容2”)
程序段2
;;
“变量内容N”)
程序段N
;;
*)
;;
esac
1)每个变量内容的程序段都需用两个分号“;;”代表程序段落的结束;
2)case和esac总是成对出现(代表内容判断的开始和结束);
3)变量可为:定义变量、输入变量、内置变量、接受变量;
4)若变量内容含有多个内容时,内容之间使用“|”分隔;
如:设置hello3.sh脚本文件仅在输入hello时才回应
1)编写hello3.sh脚本文件
2)调用hello3.sh脚本文件
如:通过内容判断语句,属于不同的内容显示不同的回应
1)编写test26.sh脚本文件
2)调用test26.sh脚本文件
循环
循环类别
for do done
for循环:循环指定次数
指令格式1:
for 形式变量 in 内容1 内容2 内容N
do
程序段
done
1)内容1~N会依次带入形式变量;
2)内容1~N可用数组变量或变量形式代替;
3)当内容中含有单引号或空格时,需使用双引号括起来
//也可通过修改IFS变量,修改字段分隔符
4)当循环结束后,形式变量默认保存最后一个带入的内容;
5)在done后添加输出重定向,可将循环结果导入到指定文件中;
如:通过for循环实现变量不同内容的输出
1)编写test3.sh脚本文件;
2)调用test3.sh脚本文件
如:建立dir_perm.sh文件实现判断目录下所有文件的权限
1)编写dir_perm.sh脚本文件;
2)调用dir_perm.sh脚本文件
内部字段分隔符(Internal Field Separator):Shell中用于分隔每个字段的字符
1)内部字符分隔符的变量位:IFS
2)默认值为:空格
3)赋值格式:IFS=字符
//若有多个字符作为分隔符,可在赋值时连写在一起
如:将换行符、冒号、分号和双引号作为分隔符的格式为:IFS=$‘\n’:;”
如:通过IFS变量实现for循环中的多个换行输入
1)编写test7.sh脚本文件
2)调用test7.sh脚本文件
指令格式2:
for (( 初始值;循环条件;赋值运算 ))
do
程序段
done
1)格式类似于C语言的for循环,且可调用变量;
2)初始值和赋值运算可有多个,但循环条件仅能有一个;
如:创建sum1_input.sh文件,计算1加到输入数的和
1)编写sum1_input.sh脚本文件
2)调用sum1_input.sh脚本文件
如:在for循环中定义多个初始值和赋值运算
1)编写test8.sh脚本文件
2)调用test8.sh脚本文件
while do done
while循环:直到条件不成立才退出循环
指令格式:
while [ 判断条件 ]
do
程序段
done
(1)若指定多个判断条件时
1)只根据最后一个判断条件的返回的状态码判断是否继续循环;
2)每个判断条件需单独占据一行;
3)多个判断条件会依次执行;
(2)在done后添加输出重定向,可将循环结果导入到指定文件中;
如:通过while循环输出数值
1)编写test9.sh脚本文件
2)调用test9.sh脚本文件
until do done
until循环:直到条件成立才退出循环
指令格式:
until [ 判断条件 ]
do
程序段
done
(1)若指定多个判断条件时
1)只根据最后一个判断条件的返回的状态码判断是否继续循环;
2)每个判断条件需单独占据一行;
3)多个判断条件会依次执行;
(2)在done后添加输出重定向,可将循环结果导入到指定文件中;
控制循环
嵌套循环
嵌套循环(Nested Loop):循环的程序段内可调用任意类型的命令(包含循环)
如:创建choice_what.sh从数组中随机输出三个数,且不能重复
1)编写choice_what.sh脚本文件
2)调用choice_what.sh脚本文件
如:通过内部循环实现/etc/passwd文件的格式化输出
1)编写test10.sh脚本文件;
2)调用test10.sh脚本文件
跳出循环
跳出循环分为:break命令、continue命令
(1)break命令:跳出当前正在执行循环,并结束循环
1)指令格式:break N
//N指定跳出的循环层级(若没有,则默认为1)
如:通过break命令,跳出for循环
1)编写test11.sh脚本文件
2)调用test11.sh脚本文件
(2)continue命令:跳出本次循环,开始下一次循环
1)指令格式:continue N
//N指定跳出的循环层级(若没有,则默认为1)
如:通过continue跳出循环
1)编写test12.sh脚本文件
2)调用test12.sh脚本文件