目录
  • 一.条件语句
    • 1.test命令测试条件表达式
    • 2.整数数值比较
    • 3.字符串比较
    • 4.逻辑测试(短路运算)
  • 二.if语句
    • 1.单分支结构
    • 2.双分支结构
    • 3.多分支结构
  • 三.case语句
    • 四.if语句和case语句脚本小仓库
      • 1.字符识别输入数字or字母(case
      • 2.分数等级分类(if
      • 3.测试机器是否在线(for、if
      • 4.猜价格小游戏(while、if
      • 5.检查文件是否存在且有执行权限(if
      • 6.赛跑选拔并分组(if
      • 7.解压压缩包(case
      • 8.判断奇数偶数(if

    一.条件语句

    条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成。

    测试过程,实现评估布尔声明,以便用在条件性环境下进行执行

    • 若真,则状态码变量 $? 返回0
    • 若假,则状态码变量 $? 返回1

    1.test命令测试条件表达式

    格式1:test [操作符选项] 条件表达式
    格式2:[ 操作符 条件表达式 ]

    常见的测试操作符含义
    -d测试是否为目录(directory)
    -e测试目录或文件是否存在(Exist)
    -f测试是否为文件(File)
    -r测试当前用户是否有权限读取(Read)
    -w测试当前用户是否有权限写入(Write)
    -x测试当前用户是否有权限执行(eXcute)
    -L测试是否为软连接文件
    -nt判断文件A是否比文件B新
    -ot判断文件A是否比文件B旧
    -ef判断两个文件是否为同一文件

    示例1:test [操作符选项] 条件表达式

    示例2:[ 操作符 条件表达式 ]

    2.整数数值比较

    格式:
    [ 整数1 操作符 整数2 ]

    常见测试操作符:

    操作符含义
    -eq等于(Equal)
    -ne不等于(Not Equal)
    -lt小于(Leser Than)
    -gt大于(Greater Than)
    -le小于或等于(Lesser or Equal)
    -ge大于或等于(Greater or Equal)

    示例1:比较两个整数大小

    示例2:查询当前目录下的文件数是否大于10,如果大于,则进行提示

    示例3: 查看系统内存是否低于1024M,如果低于则提示

    3.字符串比较

    格式:
    [ "字符串1" = "字符串2" ] 			#判断是否相等
    [ "字符串1" != "字符串2" ] 			#判断是否不等
    [ -z "字符串" ]                     #判断字符串内容是否为空
    [ -n "字符串" ]                     #判断字符是否存在

    示例:

    4.逻辑测试(短路运算)

    格式:
    [ 表达式1 ] 操作符 [ 表达式2 ]
    命令1 操作符 命令2

    常见条件

    • -a或&&:逻辑与,“而且”的意思全真才为真
    • -o或||:逻辑或,“或者”的意思一真即为真
    • !:逻辑否

    [ 表达式1 ] && [ 表达式2 ] 等同于 [ 表达式1 -a 表达式2 ] 等同于 [[ 表达式1 && 表达式2 ]] 
    [ 表达式1 ] || [ 表达式2 ] 等同于 [ 表达式1 -o 表达式2 ] 等同于 [[ 表达式1 || 表达式2 ]] 

    三元运算符

    [ 表达式 ] && a || b

    当条件表达式为真时,取a值;当条件表达式为假时,取b值

    二.if语句

    1.单分支结构

    如果只有一个判断式要进行,那么我们可以使用单分支的if语句

    格式:
    if [ 条件判断式 ]; 
    then
    	                #当条件判断成立时,可以进行的命令工作内容
    fi 					#这里将if反过来写,结束if语句的意思

    2.双分支结构

    格式:
    if 判断条件; then
     条件为真的分支代码
    else
     条件为假的分支代码
    fi

    3.多分支结构

    格式:
    if [ 条件判断式 ]; then
    	当条件判断成立时,可以进行的命令工作内容
    elif [ 条件判断式二 ]; then
    	当条件判断成立时,可以进行的命令工作内容
    else	
    	当上面的条件判断都不成立时,可以进行的命令工作内容
    fi 

    三.case语句

    格式:
    case 变量名称 in
    “第一个变量内容”
    	程序段
    	;;
    “第二个变量内容”
    	程序段
    	;;
    *)
    	不包含第一个变量内容与第二个变量内容的其他程序执行段
    	默认程序段
    	;;
    esac

    注意点:

    • case行首必须以单词“in”,每一模式必须以单个右括号")"结束
    • 双分号";;"表示命令序列的结束
    • 模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
    • 最后的)表示默认模式,其中的相当于通配符

    四.if语句和case语句脚本小仓库

    1.字符识别输入数字or字母(case

    #!/bin/bash
    read -p "请在此处输入:" key
    case $key in
    [0-9])
    echo "你输入的是 数字"
    ;;
    [a-z]|[A-Z])
    echo "你输入的是 字母"
    ;;
    *)
    echo "输入有误"
    bash $0
    esac

    2.分数等级分类(if

    #!/bin/bash
    #积分分类
    read -p "请输入积分(0-100):" JF
    if [ $JF -ge 90 ];then
      echo '优'
    elif [ $JF -lt 90 ];then
     echo '差'
    fi

    3.测试机器是否在线(for、if

    #!/bin/bash
    for i in {1..254}
    do
    {
    ping  -c2  -w2  192.168.91.$i &>/dev/null
    if  [ $? -eq 0 ]
    then
    echo  host $i is online
    echo "$i" >> host.txt
    else
    echo "host $i is offline"
    fi
    }&
    done
    wait

    4.猜价格小游戏(while、if

    #!/bin/bash
    p=`echo $[RANDOM%1000+1]`
    time=0
    while true
    do
    let time++
    read -p "请输入您猜测的价格(1-1000):" h
    if [ $h -eq $p ]
    then
    echo "恭喜您猜中了,您一共猜测了$time次"
    exit
    elif [ $h -gt $p ]
    then
    echo "您猜测的价格过高"
    else
    echo "您猜测的价格过低"
    fi
    done

    5.检查文件是否存在且有执行权限(if

    #!/bin/bash
    #检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权
    cd /root
    test -f test.sh
    if [ $? -eq 0 ];then
      test -x test.sh
      if [ $?-eq 0 ];then
        echo "有test.sh文件且可执行"
      else
        echo "有test.sh文件但不可执行"
      fi
    else
      echo "没有test.sh文件"
    fi

    6.赛跑选拔并分组(if

    #!/bin/bash
    #提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,
    #大于10秒的都淘汰,如果输入其它字符则提示重新输入;
    #进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
    read -p "请输入您100米赛跑的秒数:" sec 
    if [ $sec -gt 0 ] && [ $sec -le 10 ];then
         read -p "请输入您的性别(男|女):" sex 
      if [ $sex = "男" ] || [ $sex = "女" ];then
        if [ $sex == "男" ];then
           echo "恭喜进入选拔赛男生组"
        elif [ $sex == "女" ];then
           echo "恭喜进入选拔赛女生组"
        fi  
      else
        echo "输入错误,请重新输入"
      fi  
    else
        echo "很遗憾,您被淘汰了"
    fi
     

    7.解压压缩包(case

    #!/bin/bash
    #用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
    read -p "请输入你要解压的文件:" file
    case $file in
    *.tar.bz2)
    echo "正在解压bz2文件至opt目录中....."
    tar -xvf $file -C /opt
    ;;
    *.tar.gz)
    echo "正在解压gz文件至opt目录中....."
    tar -xvf $file -C /opt
    ;;
    *)
    echo "文件格式有误,请重新输入文件"
    ;;
    esac

    8.判断奇数偶数(if

    方法一:
    #!/bin/bash
    read -p "请输入一个数字:" num
    let i=$num+1
    if [ $? -eq 0 ];then
      echo "你输入的是整数"
        let rst=$num%2
        if [ $rst -eq 0 ];then
          echo "你输入的是偶数"
        else
          echo "你输入的是奇数"
        fi
    else
      echo "你输入的不是整数"
    fi
    方法二:
    #!/bin/bash
    #判断输入的内容是奇数还是偶数
    read -p "请输入一个数字:" num
    let n=$num+1
    if [ $? -eq 0 ];then
      echo "你输入的是整数"
        if [ $[ $num % 2 ] -eq 0 ];then
          echo "你输入的是偶数"
        else
          echo "你输入的是奇数"
        fi
    else
      echo "你输入的不是整数"
    fi

    到此这篇关于Shell条件语句(条件测试、if语句、case语句)的文章就介绍到这了,更多相关Shell条件语句内容请搜索本网站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本网站!

    您可能感兴趣的文章:

    • 详解shell脚本中的case条件语句介绍和使用案例
    • Shell脚本的条件测试和if条件语句使用方法