第一篇 shell脚本中的if语句
一、shell脚本的语句控制
□前面提到了过程式编程语言有三种过程:
顺序执行:按照顺序一条一条语句执行;
选择执行:按照条件进行选择执行;
循环执行:按照给定的循环条件进行循环执行。
□其中,顺序不需要特定的控制,只需按照语句依次执行即可;选择执行,则需要特定的控制语句(如:if,case)来判断执行;循环执行则需要特定的循环控制控制(如:for,while等)。
二、使用read 命令来接受输入
□在bash脚本编程过程当中有时程序需要与用户之间进行交互,如提示用户输入一些参数等,此时,我们可以使用read命令来完成此功能
□语法:read [option]…[name]
-p :“说明信息” (指示要显示的提示)
-t :TIMEOUT
注意:read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量
示例:read -p “Enter a filename:“ FILE
三、条件选择if语句
□选择执行:
注意:if语句可嵌套(if是一个关键字,不是一个命令。)
单分支
if 判断条件;then
条件为真的分支代码
fi
双分支
if 判断条件; then
条件为真的分支代码
else
条件为假的分支代码
fi
□多分支
if CONDITION1; then
if-true
elif CONDITION2; then
if-ture
elif CONDITION3; then
if-ture
…
else
all-false
fi
从上而下逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
示例:
根据命令的退出状态来执行命令
if ping-c1-W2station1 &> /dev/null;then
echo 'Station1isUP'
elif grep"station1"~/maintenance.txt &> /dev/null;then
echo 'Station1isundergoingmaintenance‘
else
echo'Station1isunexpectedlyDOWN!' exit1
fi
四、条件判断case语句(离散值的匹配)
□ case 变量引用in
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默认分支
;;
esac
□case支持glob风格的通配符:
*: 任意长度任意字符
?: 任意单个字符
[]:指定范围内的任意单个字符[adc](也可以表示范围[1-10])
a|b: a或b
注意:1.if语句在使用过程中,可以实现多重嵌套,这里一定要注意书写的格式,分好层次,不要写乱了
2.case一般是在离散值的匹配当中用的较多,一定要注意书写格式,不要写错了
3.在写脚本的时候不能着急,要构思清新,每一种情况都要考虑到。
练习:
1、写一个脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息
2、写一个脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的是yes还是no,或是其它信息
3、写一个脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型(普通,目录,链接,其它文件类型)
4、写一个脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数
五、循环语句
□循环执行
将某代码段重复运行多次
□重复运行多少次:
循环次数事先已知
循环次数事先未知
□有进入条件和退出条件
□for, while, until
六、for循环
□语法:for 变量名in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束
□列表生成方式:
(1) 直接给出列表
(2) 整数列表:
(a) {start..end}
(b) $(seq[start [step]] end)
(3) 返回列表的命令
$(COMMAND)
(4) 使用glob,如:*.sh
(5) 变量引用;
$@, $*
六、while循环
□语法:while CONDITION; do
循环体
done
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环
因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true;
退出条件:CONDITION为false
七、until循环
□语法:until CONDITION; do
循环体
done
进入条件:CONDITION 为false
退出条件:CONDITION 为true
八、循环控制语句
1.用于循环体中
continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
break [N]:提前结束第N层循环,最内层为第1层
2.创建无限循环
▷while true; do
循环体
done
▷until false; do
循环体
done
for练习
1、判断/var/目录下所有文件的类型
2、添加10个用户user1-user10,密码同用户名
3、/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件,以K开头的文件输出为文件加stop,以S开头的文件输出为文件名加start;
“K34filename stop”
“S66filename start”
4、写一个脚本,提示输入正整数n的值,计算1+2+3+…n的总和
5、写一个脚本,提示请输入网络地址,如192.168.0.0,判断输入的网段中主机在线状态
6、打印九九乘法表
while练习
1、求100以内所有正整数之和
2、通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态,统计在线主机和离线主机各多少。
3、打印九九乘法表
4、利用变量RANDOM生成10个随机数字,输出这个10数字,并显示其中的最大者和最小者
5、打印国际象棋棋盘
until练习
1、每隔3秒钟到系统上获取已经登录的用户的信息;如果发现用户hacker登录,则将登录时间和主机记录于日志/var/log/login.log中,并提示该用户退出系统。
2、随机生成10以内的数字,实现猜字游戏,提示比较大或小,相等则退出。
原创文章,作者:zhumengxiaotao,如若转载,请注明出处:http://www.178linux.com/36300
评论列表(1条)
都循环语句语法总结的较好,作业也完成的很出色,我们可以尝试着在写脚本的同时总结一些各个循环语句所适应的场景,以便于在以后使用过程中选择最好的语句,这样有利于我们节约脚本运行的时间,提高我们的工作效率哦。