bobpxp 发表于 2018-8-28 11:45:49

[笔记]shell脚本中的流程控制

  流程控制:
  选择:if,cace
  循环:for,while,until
  select:条件测试完后根据测试结果决定"选择"或"循环"
  命令结束状态变量$?值为0时执行成功,非0失败
  if条件判断基本语法:
    #1.if-then基本格式  
    if 条件测试;then   #只有条件测试为真(0)才会继续
  
      命令区域
  
    fi
  

  
    #2.if-then-else基本格式
  
    if 条件测试;then   #条件测试为真执行命令区域1,否则执行2
  
      命令区域1
  
    else
  
      命令区域2
  
    fi
  

  
    #3.if完整格式
  
    if 条件测试1;then
  
      命令区域1
  
    elif 条件测试2;then
  
      命令区域2
  
    else
  
      命令区域3
  
    fi
  

  
    #注意:
  
    #    if ,then在同一行时需用分号隔开
  
    #    elif可以有多行而else只能有一行
  
    #    条件测试可以有多种形式,单个命令或管道等
  
    #    测试部分为管道时选取最后一个命令的返回值为条件测试真假值
  
    #    使用!可以对返回值取反,但!与命令间必须有空格隔开
  复合判断:
  ((算式)) :算式运算结果只有不为0时返回真值0,不必理会特殊字符
  [[ 判断式 ]] :注意空格,不用理会特殊字符
  test 判断式 :注意特殊符号的转义
  [ 判断式 ] :同test,且需注意空格
  -a -o 进行 且,或 逻辑组合判断
  COMMAND1&& COMMAND2 :逻辑AND,COMMAND1执行成功才执行COMMAND2,COMMAND2成功返回真值0
  COMMAND1|| COMMAND2 :逻辑OR,COMMAND1执行不成功才执行COMMAND2,任一个则成功返回真值0
  注意:[[ 判断式 ]]中若使用"==""!="且这两个运算符右方的字符串单引号或双引号添加与否导致的结果不同
  判断式中字符串与判断符之间的空格
  算式判断:
  int1 -eq int2      两数相等为真
  int1 -ne int2      两数不等为真
  int1 -gt int2      int1大于int2为真
  int1 -ge int2      int1大于等于int2为真
  int1 -lt int2      int1小于int2为真
  int1 -le int2      int1小于等于int2为真
  文件判断:
  -a file      文件存在为真
  -b file      文件为块特殊文件为真
  -c file      文件为字符特殊文件为真
  -d file      目录存在为真
  -e file      文件存在为真
  -f file      文件为正规文件为真

  -g file      文件存在且设置了set group>  -h file      符号链接文件
  -p file      管道文件
  -s file      文件大小大于0
  -r file      可读为真
  -w file      可写为真
  -x file      可执行为真
  -O file      文件为有效的使用者所拥有
  -G file      文件为有效的组所拥有
  -N file      文件存在且自上次读取后曾修改过
  file1 -nt file2      文件1比文件2新,或文件1存在但文件2不存在
  file1 -ot file2      文件1比文件2旧,或文件2存在但文件1不存在
  file1 -ef file2      文件1和文件2参考到相同的设备或inode号
  case条件判断基本语法:
    case 待测项 in  
      样式1) 命令区域1;;
  
      样式2) 命令区域2;;
  
      ....
  
      *) 命令区域;;
  
    esac
  

  
    #注意:
  
    #    待测项符合某一样式则执行对应命令区域
  
    #    命令区域可由单行或多行指令组成,但最后一行指令后须以;;结尾
  
    #    样式*)通常发在最后区域以捕捉其他所有非指定样式
  for循环基本语法:
    for 变量 in 串行  
    do
  
      命令区域
  
    done
  
    #注:
  
    #串行可以是变量或是字符串的组合[彼此间用$IFS所定义的分隔符(默认空格)隔开]
  
    #    还可使用"for ((起始条件;终止条件;变化值))"类似C的用法
  
    #    for ((;1;)) 可做无穷循环,Ctrl-c终止循环
  while循环基本语法:
    while 条件测试  
    do
  
      命令区域
  
    done
  
    # 注:while ((1)) 或 while 或 while true 可做无穷循环
  
    ##注意:while中条件测试返回值为真才进入下方循环!!!!
  until循环基本语法:
    until 条件测试  
    do
  
      命令区域
  
    done
  
    ##注意:until中条件测试返回值为假才进入下方循环!!!!
  select命令基本语法:
    select 选项变量 in 串行  
    do
  
      命令区域
  
    done
  
    #注:具体用法待补充(-_-)
  break与continue:
  在for, while, until, select中若想要提前结束循环,可在循环中使用break N
  在for, while, until, select中使用continue会跳过本次循环,重新开始执行下一个循环
  ^_^


页: [1]
查看完整版本: [笔记]shell脚本中的流程控制