select
select
select variable in list
do
循环体命令
done
select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3提示符,等待用户输入
用户输入菜单列表的某个数字,执行相应的命令
用户输入被保存在内置变量REPLY中
select是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c退出循环
select经常和case联合使用
与for循环类似,可以省略 in list,此时使用位置参量
示例:建立一个菜单
[root@centos SC]#vim menu.sh
#!/bin/bash
######提示输入
PS3="please choose your menu: "
######建立菜单选择
select menu in exit huimian hulatang yangroutang
do
case $menu in
exit)
echo exit
exit
;;
huimian)
echo 10yuan
;;
hulatang)
echo 5yuan
;;
yangroutang)
echo 15yuan
;;
*)
echo unknown
break
esac
echo your choose is $menu
echo "You input is $REPLY"
done
"menu.sh" 27L, 370C written
######测试结果
[root@centos SC]#./menu.sh
1) exit
2) huimian
3) hulatang
4) yangroutang
please choose your menu: 3
5yuan
your choose is hulatang
You input is 3
please choose your menu: 2
10yuan
your choose is huimian
You input is 2
please choose your menu: 1
exit
[root@centos SC]#./menu.sh
1) exit
2) huimian
3) hulatang
4) yangroutang
please choose your menu: 6
unknown
trap
trap
trap '触发指令' 信号
自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
trap ' ' 信号
忽略信号的操作
trap '-' 信号
恢复原信号的操作
trap -p
列出自定义信号操作
trap 示例
[root@centos SC]#vim trap.sh
#!/bin/bash
######用显示int代替原有信号会有的操作
trap 'echo int' int
trap -p
for i in {1..10}
do
echo i=$i
sleep 0.5
done
######忽略信号的操作
trap '' int
trap -p
for i in {11..20}
do
echo i=$i
sleep 0.5
done
恢复原有信号的操作
trap '-' int
trap -p
for i in {21..30}
do
echo i=$i
sleep 0.5
done
######测试结果:
[root@centos SC]#./trap.sh
trap -- 'echo int' SIGINT
i=1
i=2
i=3
i=4
i=5
i=6
i=7
i=8
i=9
i=10
trap -- '' SIGINT
i=11
i=12
i=13
i=14
i=15
i=16
i=17
i=18
i=19
i=20
i=21
i=22
i=23
i=24
i=25
i=26
i=27
i=28
i=29
i=30
[root@centos SC]#./trap.sh
trap -- 'echo int' SIGINT
i=1
i=2
i=3
i=4
######正常情况下ctrl+c会退出脚本,此处用echo int代替
^Cint
i=5
i=6
i=7
i=8
^Cint
i=9
i=10
trap -- '' SIGINT
i=11
i=12
i=13
#######此处忽略原有信号ctrl+c操作
^Ci=14
i=15
i=16
i=17
^Ci=18
i=19
i=20
i=21
i=22
i=23
######此处恢复原有ctrl+c信号操作
^C