shell脚本之流程控制

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风格的通配符:

  1. *:任意长度任意字符
  2. ?:任意单个字符
  3. []:指定范围内的任意单个字符
  4. 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]:提前结束第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命令

用于将参量列表list 左移指定次数,缺省为左移一次。

参量列表list 一旦被移动,最左端的那个参数就从列表中删除。while循环遍历位置参量列表时,常用到shift。

./doit.sh a b c d e f g h

./shfit.sh a b c d e f g h

  1. #!/bin/bash
  2. # Name: doit.sh
  3. # Purpose: shift through command line arguments
  4. # Usage: doit.sh [args]
  5. while[ $# -gt 0 ] # or (( $# > 0 ))
  6. do
  7. echo $*
  8. shift
  9. done
  1. #!/bin/bash
  2. #step through all the positional parameters
  3. until[-z "$1"]
  4. do
  5. echo "$1"
  6. shift
  7. done
  8. echo

创建无限循环

  1. while true;do
  2. 循环体
  3. done
  1. until false;do
  2. 循环体
  3. 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

控制变量初始化:仅在运行到循环代码段时执行一次

控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

例如:

  1. for((i=0;i<=20;i++))
  2. do
  3. echo "Helllo I am $i"
  4. done

select循环与菜单

select variable in list
do
    循环体命令
done

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

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

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

select与case

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

select 经常和case 联合使用

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

示例:

  1. PS3="please input numbert: "
  2. select menu in羊肉汤米饭胡辣汤饺子拉面烩面 quit;do
  3. case $REPLY in
  4. 1)
  5. echo "羊肉汤,the price is 15."
  6. ;;
  7. 2)
  8. echo "米饭,the price is 12."
  9. ;;
  10. 3)
  11. echo "胡辣汤,the price is 30."
  12. ;;
  13. 4)
  14. echo "饺子,the price is 20."
  15. ;;
  16. 5)
  17. echo "拉面,the price is 12."
  18. ;;
  19. 6)
  20. echo "烩面,the price is 10."
  21. ;;
  22. 7)
  23. break
  24. ;;
  25. esac
  26. done

信号捕捉trap

trap ‘触发指令‘ 信号
    自定义进程收到系统发出的指定信号后,将执行触发指令,而不会执行原操作
trap ‘‘ 信号
    忽略信号的操作
trap ‘-‘ 信号
    恢复原信号的操作
trap -p
    列出自定义信号操作

示例:

  1. #!/bin/bash
  2. trap ‘echo "signal:SIGINT"‘ int
  3. trap -p
  4. for((i=0;i<=10;i++))
  5. do
  6. sleep 1
  7. echo $i
  8. done
  9. trap ‘‘ int
  10. trap -p
  11. for((i=11;i<=20;i++))
  12. do
  13. sleep 1
  14. echo $i
  15. done
  16. trap ‘-‘ int
  17. trap -p
  18. for((i=21;i<=30;i++))
  19. do
  20. sleep 1
  21. echo $i
  22. done

#wmd-preview { font-family: Consolas, 微软雅黑 !important }
#wmd-preview h1 { color: #0077bb }

时间: 2024-10-24 17:13:19

shell脚本之流程控制的相关文章

shell脚本编程——流程控制

shell脚本编程--流程控制 目   录 一. if 二. case 三. for 四. while 五. until 六. 综合应用 一.if 1.语法 (1)单分支 if  判断条件:then fi (2)双分支 if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi (3)多分支 if 判断条件1; then 条件为真的分支代码 elif 判断条件2; then 条件为真的分支代码 elif 判断条件3; then 条件为真的分支代码 else 以上条件都为假

Shell脚本之流程控制(if、for、while)

if 判断 if语句的三种格式: (1)if (2)if else (3)if elif else 语法格式如下: #if 语法格式 if 条件 then 命令1... 命令2... fi #if else 语法格式 if 条件 then 命令1... 命令2... else 命令1... 命令2... fi #if elif else语法格式 if 条件1 then 命令1... 命令2... elif 条件2 then 命令1... 命令2... else 命令1... 命令2... fi

Shell命令和流程控制

Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字操作的. 常用命令语法及功能 echo "some text": 将文字内容打印在屏幕上 ls: 文件列表 wc –l filewc -w filewc -c file: 计算文件行数 计算文件中的单词数 计算文件中的字符数 cp sourcefile destfile: 文件拷贝 mv

Linux中的shell脚本编程---语句控制

概述: shell脚本的语句控制 □前面提到了过程式编程语言有三种过程: 顺序执行:按照顺序一条一条语句执行: 选择执行:按照条件进行选择执行: 循环执行:按照给定的循环条件进行循环执行. □其中,顺序不需要特定的控制,只需按照语句依次执行即可:选择执行,则需要特定的控制语句(如:if,case)来判断执行:循环执行则需要特定的循环控制控制(如:for,while等). 一.使用read 命令来接受输入 □在bash脚本编程过程当中有时程序需要与用户之间进行交互,如提示用户输入一些参数等,此时,

Shell脚本的条件控制和循环语句

条件判断:if语句 语法格式: if [ expression ] then Statement(s) to be executed if expression is true fi 注意:expression 和方括号([ ])之间必须有空格,否则会有语法错误. if 语句通过关系运算符判断表达式的真假来决定执行哪个分支.Shell 有三种 if ... else 语句: if ... fi 语句 if ... else ... fi 语句 if ... elif ... else ... f

Python脚本之流程控制if语句

#!/usr/bin/env python # FileName: if.py number = 23 guess = int(raw_input('Enter an integer :')) if guess == number: print 'Congratulations ,you guessed it.' print 'But you do not win any prizes!' elif guess > number: print 'No, it is a little higher

shell - 变量,流程控制

1. 查看内存 free -m free -m|awk '/^Mem/ {print $3/$2*100}' 2. 监控内存使用超过80 报警 free_use = free -m|awk '/Mem/ {print $3/$2*100}' echo ${free_use%.*} # 从后往前删,用% if [ ${free_use%.*} -gt 80];then echo "内存超80" fi 3. 创建10个文件,将txt 改为txt.bak, 把bak文件打包为123, 还原文

shell脚本之流程控制语句

一.分支控制语句 1.if .. fi条件 if condition; then action fi 2.if .. else .. fi条件 if condition;then action; else action fi 3.if .. else if ..else ..fi条件 if condition;then action; else if condition;then action; else action; fi 注意:if和slse语句可以进行嵌套,if条件判断可能因此变得很长,

linux shell编程 之 流程控制

if 语句: 以前就是用的test 例子1:当硬盘超过80%,就进行通知管理者 例子2:Apache关闭时,自动重启 例子3:多分支if语句 例子4:备份etc目录 case语句: for语句: 批量进行解压缩类似 批量添加用户 while语句: until循环: 与while循环相反,只要判断条件不成立,一直循环,知道条件成立 用until达到和上面例子一样效果: