zoukankan      html  css  js  c++  java
  • linux shell脚本基础-----2

    2.2 条件及控制结构

      条件: test 或 [命令。 当使用[命令时,还需要使用]来结尾。

        test命令的退出码(表明条件是否被满足)决定是否需要执行后面的条件代码。

      例如:

      

    if test -f fred.c
    then
        echo "test success"
    fi
    
    if [ -f fred.c ]
    then
        echo "test success"
    fi
    
    if [ -f fred.c ]; then
      echo "test success"
    fi

      注意:

      1. [和被检查的条件之间必须留出空格 ;

      2. then可和if放在一行,但必须在前面加分号

      条件类型: test命令可以使用的条件类型可以归为3类:字符串比较、算术比较和与文件有关的条件测试

    条件类型
    字符串比较 结果
    string1 = string2 如果两个字符串相同,则结果为真
    string1 != string2 如果两个字符串不同,则结果为真
    -n string 如果字符串不为空,则结果为真
    -z string 如果字符串为null(空串),则结果为真
    算术比较  
    expression1 -eq expression2 如果两个表达式相等,则结果为真
    expression1 -ne expression2 如果两个表达式不等,则结果为真
    expression1 -gt expression2 如果expression1>expression2,则结果为真
    expression1 -ge expression2 如果expression1>=expression2,则结果为真
    expression1 -lt expression2 如果expression1<expression2,则结果为真
    expression1 -le expression2 如果expression1<=expression2,则结果为真
    ! expression 如果表达式为假则结果为真,如果表达式为真则结果为假
    文件条件测试  
    -d file   如果文件是一个目录则结果为真
    -e file 如果文件存在则结果为真(不可移植,常使用-f选项)
    -f file 如果文件是一个普通文件则结果为真
    -g file 如果文件的set-group-id位被设置则结果为真
    -r file 如果文件可读,则结果为真
    -s file 如果文件的大小为0则结果为真
    -u file 如果文件的set-user-id位被设置则结果为真
    -w file 如果文件可写则结果为真
    -x file 如果文件可执行则结果为真

     

     

     

    控制结构: 

    1. if 语句

    if condition
    then
        statements
    else  #或elif
        statements
    fi
    #!/bin/sh
    
    echo "Is it morning? Please answer yes or no"
    
    read timeofday
    
    if [ "$timeofday" = "yes" ] #注意,如果用if [ $timeofday = "yes" ],可能变成 if [ = "yes" ]
    then
         echo "Good morning"
    elif [ "$timeofday" = "no" ] ; then
        echo "Good afternoon"
    else
        echo "Sorry, $timeofday not recognized. Enter yes or no"
        exit 1
    fi
    
        exit 0

    2. for 语句

    #/bin/sh
    
    # 固定字符串实例
    for foo in bar fud 43
    do
        echo $foo
    done
    
    # 使用通配符扩展的for循环
    for file in $(ls f*.sh); do
        echo $file
    done
    
    exit 0

    3. while和until语句

    # 若condition为真,则执行statements,不满足条件就会终止
    while condition do
        statemensts 
    done
    
    # 若condition不为真,则执行statements,即条件不满足时执行statements
    until condition do
        statements
    done

    3. case语句

    case variable in
        pattern [ | pattern] ... )  statements;;
        pattern [ | pattern] ... )  statements;;
        ...
     esac

    注意:

        每个模式行都已双分号(;;)结尾;

        要特别小心,case将使用第一个匹配的模式,即使后续的模式有更加精确的匹配也是如此。

      

    #/bin/sh
    
    echo "Is it morning? Please answer yes or no"
    read timeofday
    
    case "$timeofday" in
            yes)    echo "Good Morning";;
            no )    echo "Good afternoon";;
            y   )    echo "Good Morning";;
            n  )     echo "Good afternoon";;
            *  )     echo "Sorry, answer not recognized";;       
    esac
    
    case "$timeofday" in
            yes | y | Yes | YES)    echo "Good Morning";;
            n* | N* )    echo "Good afternoon";;
            *  )     echo "Sorry, answer not recognized";;       
    esac
    
    exit 0

    4. 命令列表

    statement1 && statement2 && statement3 && ...    #从左到右顺序执行每条命令,直到有条命令返回false或列表中所有命令执行完毕。&&的作用是检查前一条命令的返回值。
    statement1 || statement2 || statement3 || ...    #从左到右顺序执行每条命令,直到有条命令返回true或列表中所有命令执行完毕。

    5. 语句块
      如果想在某些只允许使用单个语句的地方(比如&&或||列表中)使用多条语句,可以把它们括在{}内来构成一个语句块。

  • 相关阅读:
    一个弹框表单复用create,edit表单操作
    数组去重,防抖节流,渲染几万条数据不卡页面,32个手撕JS,彻底摆脱初级前端
    解决vue表单回显数据无法修改的问题
    正则
    将UTC时间转换为当地的时间
    Vue页面上实时显示当前时间,每秒更新
    互联网协议
    记录:批量重命名文件夹下的文件
    IdentityServer4 无法登录,一直跳转登录界面
    同解与等价
  • 原文地址:https://www.cnblogs.com/wangzhijun/p/3601289.html
Copyright © 2011-2022 走看看