shell脚本之流程控制
2017-09-17 23:47
260 查看
shell脚本之流程控制
shell脚本之流程控制条件语句
条件判断
循环语句for,while,until
for循环
while循环
until循环
循环控制语句continue
循环控制语句break
循环控制shift命令
创建无限循环
while的特殊用法
for的特殊用法
select循环与菜单
select与case
信号捕捉trap
条件语句
选择执行:注意:if语句可嵌套
单分支
if 判断条件;then 条件为真的分支代码 fi
双分支
if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi
多分支
if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假的分支代码 fi
逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
示例:
if ping -c 1 -W 2 station1 &>/dev/null;then echo'Station1isUP' elif grep"station1"~/maintenance.txt&>/dev/null ;then echo'Station1isundergoingmaintenance‘ else echo'Station1isunexpectedlyDOWN!' exit1 fi
条件判断
case 变量引用in PAT1) 分支1 ;; PAT2) 分支2 ;; ... *) 默认分支 ;; esac
case支持glob风格的通配符:
*:任意长度任意字符
?:任意单个字符
[]:指定范围内的任意单个字符
a|b: a或b
循环语句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同while
进入条件:CONDITION 为false
退出条件:CONDITION 为true
循环控制语句continue
continue:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为第1层
while CONDTIITON1; do CMD1 ... if CONDITION2; then continue fi CMDn ... done
循环控制语句break
break:提前结束第N层循环,最内层为第1层
while CONDTIITON1; do CMD1 ... if CONDITION2; then break fi CMDn ... done
循环控制shift命令
用于将参量列表list 左移指定次数,缺省为左移一次。参量列表list 一旦被移动,最左端的那个参数就从列表中删除。while循环遍历位置参量列表时,常用到shift。
./doit.sh a b c d e f g h
./shfit.sh a b c d e f g h
#!/bin/bash # Name: doit.sh # Purpose: shift through command line arguments # Usage: doit.sh [args] while[ $# -gt 0 ] # or (( $# > 0 )) do echo $* shift done
#!/bin/bash #step through all the positional parameters until[-z "$1"] do echo "$1" shift done echo
创建无限循环
while true;do 循环体 done
until false;do 循环体 done
while的特殊用法
while循环的特殊用法(遍历文件的每一行):while read line; do 循环体 done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
for的特殊用法
双小括号方法,即((…))格式,也可以用于算术运算双小括号方法也可以使bash Shell实现C语言风格的变量操作
I=10
((I++))
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式)) do 循环体 done
控制变量初始化:仅在运行到循环代码段时执行一次
控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断
例如:
for((i=0;i<=20;i++)) do echo "Helllo I am $i" done
select循环与菜单
select variable in list do 循环体命令 done
select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示
PS3 提示符,等待用户输入。
用户输入菜单列表中的某个数字,执行相应的命令
用户输入被保存在内置变量
REPLY中
select与case
select 是个无限循环,因此要记住用break命令退出循环,或用exit命令终止脚本。也可以按ctrl+c 退出循环。select 经常和case 联合使用
与for 循环类似,可以省略in list,此时使用位置参量
示例:
PS3="please input numbert: " select menu in 羊肉汤 米饭 胡辣汤 饺子 拉面 烩面 quit;do case $REPLY in 1) echo "羊肉汤,the price is 15." ;; 2) echo "米饭,the price is 12." ;; 3) echo "胡辣汤,the price is 30." ;; 4) echo "饺子,the price is 20." ;; 5) echo "拉面,the price is 12." ;; 6) echo "烩面,the price is 10." ;; 7) break ;; esac done
信号捕捉trap
trap '触发指令' 信号 自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作 trap '' 信号 忽略信号的操作 trap '-' 信号 恢复原信号的操作 trap -p 列出自定义信号操作
示例:
#!/bin/bash trap 'echo "signal:SIGINT"' int trap -p for((i=0;i<=10;i++)) do sleep 1 echo $i done trap '' int trap -p for((i=11;i<=20;i++)) do sleep 1 echo $i done trap '-' int trap -p for((i=21;i<=30;i++)) do sleep 1 echo $i done
相关文章推荐
- 【Shell 编程基础第二部分】Shell里的流程控制\函数及\脚本调试
- Shell脚本(2)之条件测试和流程控制
- shell脚本之流程控制(七)
- Shell脚本的基本流程控制
- [笔记]shell脚本中的流程控制
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法
- shell脚本和流程控制
- Shell 脚本-6- 流程控制之判断分支
- NO4.Shell脚本学习——Shell条件测试和流程控制
- shell 脚本之程序流程控制命令(1)
- shell脚本编程——流程控制
- Linux的Shell脚本中IF流程控制语句的基本语法
- shell脚本中if流程控制语句的应用
- shell脚本中if流程控制语句的应用
- shell脚本流程控制
- shell脚本流程控制
- Shell脚本学习笔记(四)--流程控制
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
- linux脚本编写基础(环境变量、shell流程控制)
- shell脚本控制流程