条件判断与循环笔记
1、if 语句(条件判断)
- 格式:
if 判断条件1 ; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
- 特点:
1)if 语句可以嵌套;
2)它是逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句。
2、case语句(条件选择)
- 格式:
case 变量引用 in
Pat1)
分支1
;;
Pat2)
分支2
;;
……
*)
默认分支
;;
esac
- 特点:
1)case支持glob风格的通配符: *: 任意长度任意字符 ?: 任意单个字符 []:指定范围内的任意单个字符 a|b: a或b。
2)输入的是哪个变量,就执行哪个变量的分支。可以对比testsrv服务脚本。
3)case语句的变量引用多匹配于离散值比较方便代码的编辑。记住:变量引用前面加$符号。
3、for语句(循环执行)
- 格式:
for 变量名 in 列表;do
循环体
done
- 特点:
1)依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。
2)变量名是名称不是变量引用,所以只写变量的名字,不加$符号。
3)列表可以直接给出(空格隔开每个元素),也可以给出整数列表({1..100..1}或者seq 1 1 100),或者给出表达式(`ls /boot`),也可以使用通配符(/boot/*.sh),还可以是用位置参数引用($@,$*)
- 特殊用法:(双小括号法)
for i in ((i=1;i<=10;i++));do
循环体
done
4、while语句(循环执行)
- 格式:
while 循环控制条件;do
循环体
done
- 特点:
1)进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环
2)因此:循环控制条件一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
3)进入条件:CONDITION为true 退出条件:CONDITION为false
- 特殊用法:
1)read读取文件:一行一行的读取文件赋值给参数line,进入循环体判断
while read line ; do
循环体
done < /etc/passwd
2)read读取命令执行结果:一行一行的读取命令的执行结果赋值给参数line,进入循环体判断
df | while read line ; do
循环体
done
5、until语句(循环执行)
- 格式:
while 循环控制条件;do
循环体
done
- 特点:
1)while语句的循环控制条件取反,则执行结果相同;循环控制条件相同,则执行结果相反
2)进入条件: CONDITION 为false 退出条件: CONDITION 为true
6、continue [n]语句(循环控制)
- 格式:用于其他语句的循环体中,用来控制循环
- 特点:
1)提前结束第n层的本轮循环,转而进入下一轮判断,最内层为第一层
2)不会结束本层的循环,继续执行!
7、break [n]语句(循环控制)
- 格式:用于其他语句的循环体中,用来控制循环
- 特点:
1)提前结束第n层的循环,最内层为第一层!
8、shift [n]命令(循环控制)
- 格式:同continue和break用法相同,用在其他语句的循环体中,用来控制循环
- 特点:
1)用于将参量列表 list 左移指定次数,缺省为左移一次。
2)参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍历位置参量列表时,常用到 shift
9、select语句(循环与菜单)
- 格式:
select variable in list ; do
循环体命令
done
- 特点:
1)select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示 PS3 提示符,等待用户输入
2)用户输入菜单列表中的某个数字,执行相应的命令
3)用户输入被保存在内置变量 REPLY 中
4)select 是个无限循环,因此要记住用 break 命令退出循环,或用 exit 命令终止脚本。也可以按 ctrl+c 退出循环
5)select 经常和 case 联合使用,与 for 循环类似,可以省略 in list,此时使用位置参量
10、trap工具(脚本执行信号捕捉)
- 格式:kill -l可以查询信号列表
trap ‘(COMMAND)’ 信号 :(执行COMMAND)不执行信号操作。
trap ‘-‘ 信号 :恢复原信号操作
trap -p :脚本执行时列出自定义信号操作
- 特点:
1)用于脚本的执行,根据发出不同的信号然后来执行相应的操作。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98078