[笔记]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 id属性
    -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 [1] 或 while true 可做无穷循环
    ##注意:while中条件测试返回值为真才进入下方循环!!!!


until循环基本语法:

    until 条件测试
    do 
        命令区域 
    done
    ##注意:until中条件测试返回值为假才进入下方循环!!!!


select命令基本语法:

    select 选项变量 in 串行 
    do 
        命令区域 
    done
    #注:具体用法待补充(-_-)


break与continue:
    在for, while, until, select中若想要提前结束循环,可在循环中使用break N [N为跳出的循环层数,N值大于等于1,为1时可以省略]
    在for, while, until, select中使用continue会跳过本次循环,重新开始执行下一个循环



^_^

你可能感兴趣的:(shell脚本选择与循环)