SHELL脚本编程进阶
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHELL脚本编程进阶相关的知识,希望对你有一定的参考价值。
shell 脚本编程进阶
流程控制
过程式编程语言 顺序执行 选着执行 循环执行
条件选择if语句
选择执行 注意:if语句可嵌套 单分支 if判断条;then 条件为真的分支代码 fi 双分支: if判断条件;then 条件为真的分支的代码 else 条件为假的分支代码 fi
if语句
多分支 if 判断条件1; then 条件1为真的分支代码 elif 判断条件2; then 条件2为真的分支代码 elif 判断条件3; then 条件3为真的分支代码 else 以上条件都为假的分支代码 fi 逐条件进行判断,第一次遇为“真”条件时,执行其分支,而后结束整个if语句
if示例
根据命令的退出状态来执行命令 if ping -c1 -W2 station1 &> /dev/null; then echo ‘Station1 is UP‘ elif grep "station1" ~/maintenance.txt &> /dev/null; then echo ‘Station1 is undergoing maintenance‘ else echo ‘Station1 is unexpectedly DOWN!‘ exit 1 fi
条件判断:case语句
case 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; ... *) 默认分支 ;; esac case支持glob风格的通配符: *: 任意长度任意字符 ?: 任意单个字符 []:指定范围内的任意单个字符 a|b: a或b
循环
循环执行 将某代码段重复运行多次 重复运行多少次 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 for, while, until
for循环
for 变量名 in 列表;do 循环体 done for i[i代表变量名] in {1..10};【in后面跟的是列表】do userdel -r user$i; done 【do和done中间的是循环体】 执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直 到列表中的元素耗尽,循环结束 例:[[email protected]:11:44bin]#sum=0; for num in 1 23 4 6 4;do sum=$[sum+num]; done; echo sum=$sum sum=38 [[email protected]:12:58bin]#for num in 1 23 4 6 4;do echo "num=$num";done num=1 num=23 num=4 num=6 num=4 [[email protected]:13:24bin]#sum=0; for num in {1..100};do sum=$[sum+num]; done; echo sum=$sum sum=5050 [[email protected]:16:24bin]#sum=0; for num in `seq 10`;do sum=$[sum+num]; done; echo sum=$sum sum=55 [[email protected]:16:47bin]#sum=0; for num in {1..100..2};do sum=$[sum+num]; done; echo sum=$sum sum=2500 例:算出1到100 和 [[email protected]:27:29bin]#sum=0; for i in {1..100};do sum=$[sum+i];done;echo sum=$sum sum=5050 [[email protected]:27:44bin]#sum=0; for i in `seq 1 2 100`;do sum=$[sum+i];done;echo sum=$sum sum=2500
for循环
列表生成方式: (1) 直接给出列表 (2) 整数列表: (a) {start..end} (b) $(seq [start [step]] end) (3) 返回列表的命令 $(COMMAND) (4) 使用glob,如:*.sh (5) 变量引用; [email protected], $*
while 循环
while CONDITION; do 循环体 done CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后 会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为 “false”终止循环 因此:CONDTION一般应该有循环控制变量;而此变量的值会在循环体不断地 进入条件:CONDITION为true 退出条件:CONDITION为false
until循环
until CONDITION; do 循环体 done 进入条件: CONDITION 为false 退出条件: CONDITION 为true
循环控制语句continue
用于循环体中 continue [N]:提前结束第N层的本轮循环,而直接进入下一轮判断;最内层为 第1层 while CONDTIITON1; do CMD1 ... if CONDITION2; then continue fi CMDn ... done
循环控制语句break
用于循环体中 break [N]:提前结束第N层循环,最内层为第1层 while CONDTIITON1; do CMD1 ... if CONDITION2; then break fi CMDn ... done
循环控制shift命令
shift [n] 用于将参量列表 list 左移指定次数,缺省为左移一次。 参量列表 list 一旦被移动,最左端的那个参数就从列表中删除。while 循环遍 历位置参量列表时,常用到 shift ./doit.sh a b c d e f g h ./shfit.sh a b c d e f g h
示例:doit.sh
#!/bin/bash # Name: doit.sh # Purpose: shift through command line arguments # Usage: doit.sh [args] while [ $# -gt 0 ] # or (( $# > 0 )) do echo $* shift done 示例:shift.sh #!/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
以上是关于SHELL脚本编程进阶的主要内容,如果未能解决你的问题,请参考以下文章