shell脚本入门详解及其实例(3)

 

1 #!/bin/bash 2 #定义变量 3 i=1 4 #当i>10时,退出循环 5 until [ $i -gt 10 ];do 6 # 输出i的值,i=i+1 7 echo $i 8 let i+=1 9 done 10 11 #删除变量 12 unset i

shell脚本入门详解及其实例

2.4 select循环

select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3提示符,等待用户输入。

用户输入菜单列表中的某个数字,执行相应的命令。

用户输入被保存在内置变量REPLY中。

select的具体语法如下:

select variable in list; do

  循环体命令

done

注意:①select是个无线循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c退出循环。

②select经常和case联合使用。

③与for循环类似,可以省略in list,此时使用位置变量。

Example:

1)生成菜单,并显示选中的价钱。

 

1 #!/bin/bash 2 #定义PS3提示符 3 PS3="Please choose the menu:" 4 #输出菜单 5 select menu in yangroutang mifan hulatang jiaozi lamian huimian quit 6 do 7 # 判断选择 8 case $REPLY in 9 1|4) 10 echo "The price is 20" 11 ;; 12 2|5) 13 echo "The price is 12" 14 ;; 15 3|6) 16 echo "The price is 10" 17 ;; 18 7) 19 break 20 ;; 21 *) 22 echo "Choose error" 23 ;; 24 esac 25 done

shell脚本入门详解及其实例

2.5 循环小补充 2.5.1 循环控制语句 continue&break

循环控制语句用于循环体中,常见的控制语句有两种,continue和break。接下来我们就来看看两者的区别:

continue语句结束的是本轮循环,直接进入下一轮判断;最内层是第1层。

break语句结束的则是整个循环,最内层为第1层。

Example:

1)求(1+3+…+49+53+…+99)的和

 

1 #定义变量 2 sum=0 3 for ((i=1;i<=100;i++));do 4 # 当i为奇数时,继续执行 5 if [ $[i%2] -eq 1 ];then 6 # 当i=51时,跳过该循环 7 if [ $i -eq 51 ];then 8 continue 9 fi 10 let sum+=$i 11 fi 12 done 13 echo "sum=$sum" 14 15 #删除变量 16 unset i sum

shell脚本入门详解及其实例

2)求(1+3+…+49)的和

 

1 #!/bin/bash 2 #定义变量 3 sum=0 4 for ((i=1;i<=100;i++));do 5 # 当i为奇数时,继续执行 6 if [ $[i%2] -eq 1 ];then 7 # 当i=51时,跳出整个循环 8 if [ $i -eq 51 ];then 9 continue 10 fi 11 let sum+=$i 12 fi 13 done 14 echo "sum=$sum" 15 16 #删除变量 17 unset i sum

shell脚本入门详解及其实例

2.5.2 循环控制命令shift

位置参数可以用shift命令左移,比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1,$2,$3丢弃,$0不移动。不带参数的shift命令相当于shift 1。

我们知道,对于位置变量或命令行参数,其个数必须是确定的,或者当shell程序不知道其个数时可以把所有参数一起赋值给变量$*。当用户要求shell在不知道位置变量个数的情况下,还能逐个的把参数一一进行处理,也就是在$1后为$2等。在shift命令执行前变量$1的值在shift命令执行后就不可用了。

Example:

1)测试shift命令

1 #!/bin/bash 2 until [ $# -eq 0 ];do 3 echo "The first argument is:$1,The number of arguments is:$#" 4 shift 5 done

shell脚本入门详解及其实例

2.5.3 信号捕捉trap

trap是一个shell内建命令,它用来在脚本中指定信号如何处理。比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令来指定一下SIGINT的处理方式了。trap命令不仅仅处理Linux信号,还能对脚本退出(EXIT)、调试(DEBUG)、错误(ERR)、返回(RETURN)等情况指定处理方式。

基本格式语法如下:

  trap ‘触发指令’ 信号

自定义进程收到系统发出的指定信号后,将执行触发指令,而不是执行原操作

      trap ‘’ 信号

忽略信号的操作

  trap ‘-’ 信号

恢复原信号的操作

      trap -p

列出自定义信号的操作,即提示当前使用的trap操作是什么。

注意:①信号的表示方法:可以是完整信号/简写/数字(具体内容通过kill -l查询)

②信号9,强制杀死,捕获不到。

Example:

1)打印0-9,ctrl+c终止无效

 

1 #!/bin/bash 2 #设置信号捕获 3 trap 'echo press ctrl+c' 2 4 for ((i=0;i<10;i++));do 5 sleep 1 6 echo $i 7 done

shell脚本入门详解及其实例


2)打印0-9,3之前ctrl+c不能终止,3之后恢复,能终止

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13481.html