一:条件选择if语句
注意:if语句可嵌套
单分支:
if 判断条件;then
条件为真的分支代码
fi
双分支:
if 判断条件;the
条件为真的分支代码
else
条件为假的分支代码
fi
多分支
if 判断条件1;then
条件为真的分支代码
elif 判断条件2;then
条件为真的分支代码
elif 判断条件3;then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
注:逐条件进行判断,第一次遇为“真”条件时,执行奇分支,然后结束整个if语句
针对上述条件的练习题;
1,编写脚本/root/bin/createuser.sh,实现如下功能:使用一个用户名做为参 数,如果指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户 的id号等信息
2,编写脚本/root/bin/checkint.sh,判断用户输入的参数是否为正整数
二:条件判断:case语句
语法格式:
case 变量引用 in
PATH1)
分支1
;;
PATH2)
分支2
;;
........
*)
默认分支
;;
esac
注:case支持glob风格的通配符:
*:任意长度的任意字符
?:任意单个字符
[]:指定范围内的任意单个字符
a|b:a或b
1,针对上述语句的练习题示范
2、编写脚本/root/bin/yesorno.sh,提示用户输入yes或no,并判断用户输入的 是yes还是no,或是其它信息
2,编写脚本/root/bin/filetype.sh,判断用户输入文件路径,显示其文件类型 (普通,目录,链接,其它文件类型)
三,循环
循环执行
将某段代码重复运行多次
重复运行多少次
循环次数事先已知
循环次数事先未知
有进入条件和退出条件
循环又分为三种:for,while,until
1,for循环
语法格式
for 变量名 in 列表;do
循环体
done
执行机制:
依次将列表中的元素赋值给:变量名”每次赋值后即执行一次循环体;直到列表中的元素耗尽,循环结束
列表的生成方式
(1)直接给出列表
(2)整数列表:
(a) {start..end}
(b) $(seq [start[step]] end)
(3)返回列表的命令
$(COMMAND)
(4)使用glob,如:*.sh
(5)变量引用;
$@,$*
针对for循环下的练习题
1,判断/var/目录下所有文件的类型
2,添加10个用户user1-user10,密码为8位随机字符
3。/etc/rc.d/rc3.d目录下分别有多个以K开头和以S开头的文件;分别读取每个文件, 以K开头的输出为文件加stop,以S开头的输出为文件名加start,如K34filename stop S66filename start
4、编写脚本,提示输入正整数n的值,计算1+2+…+n的总和
5、计算100以内所有能被3整除的整数之和
6,打印九九乘法表。
7,在/testdir目录下创建10个html文件,文件名格式为数字N(从1到10)加随机8个字 母,如:1AbCdeFgH.html
四:while循环
while CONDITION;do
循环体
done
CONDITION:循环控制条件;进入循环之前,先在一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false"终止循环
因此;CONDTION一般应该又循环控制变量而此变量的值会在循环体不断地被修正
进入条件:CONDITION为true
退出条件:CONDITION为false
针对以上条件所做的练习题
1,编写脚本,求100以内所有正奇数之和
2、编写脚本,打印九九乘法表
3、编写脚本,实现打印国际象棋棋盘
4、编写脚本,利用变量RANDOM生成10个随机数字,输出这个10数字,并显 示其中的最大值和最小值
五,until循环 (与while循环条件相反,很少用)
语法:until CONDITON ;do
循环体
done
进入条件:CONDITION为false
退出条件:CONDITION为true
练习until:
每隔3秒钟到系统上获取已经登录的用户的信息;如果发 现用户liyi登录,则将登录时间和主机记录于日志 /data/login.log中,并退出脚本
六,循环控制语句continue
在循环任务中,如果遇到continue就跳过本次循环,执行下一次循环
continue 后面加参数continue [N] 指定结束第N层的本轮循环,而直接进入下一轮判断;最内层为 第1层
示例:
while CONDTIITON1; do
CMD1
...
if CONDITION2; then
continue #如果满足第二个条件执行continue命令
fi
CMDn #跳过接下来要执行的任务而不是退出循环
...
done
七,循环控制语句break
在循环体中遇见break则结束整个任务。
break后面加参数 bark[N]指定提前结束第N层循环,最内层为第一层
示例:
while CONDTIITON1;do
CMD1
....
if CONDITION2;THEN
break #如果条件2满足条件,执行break结束整个循环
fi
CMDn
....
done
八,循环控制shift命令
shift [n]
用于将参量列表 list 左移指定次数,缺省为左移一次。
参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。
while 循环遍 历位置参量列表时,常用到 shift
练习shift
九,特殊用法
while循环的特殊用法(遍历文件的每一行):
语法:
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
双小括号写法:即((…))格式,也可以用于算术运算
双小括号方法也可以使bash Shell实现C语言风格的变量操作
I=10
((I++))
for循环的特殊格式:
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式))
do
循环体
done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做 条件判断
十,select循环与菜单
语法:
select variable in list
do
循环体命令
done
select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在 标准错误上,并显示 PS3 提示符,等待用户输入
用户输入菜单列表中的某个数字,执行相应的命令
用户输入被保存在内置变量 REPLY 中
slect 与case
select 循环主要用于创建菜单,按数字顺序排列的,它是个无限循环,因此要记住用 break 命令退 出循环,或用 exit 命令终止脚本。也可以按 ctrl+c 退出循环
select 经常和 case 联合使用
举例:创建菜单和退出菜单
十一,信号补捉
trap '触发指令' 信号
自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
trap '' 信号 :忽略信号的操作
trap '-' 信号 :恢复原信号的操作
trap -p :列出自定义信号操作
示例:
打印数字捕捉信号
完结。