• shell 条件表达式


    1、条件测试的常用语法如下

    1、test 测试表达式

    2、[ 测试表达式 ] #两边需要有空格

    3、[[ 测试表达式 ]]

    4、(( 测试表达式 ))

    说明:

    第一种和第二种是等价的,第三种是扩展的test命令,语法4常用于计算

    在[[]] 双中括号中可以使用通配符等进行模式匹配,&& ||  >  < 等操作符可以直接应用于双中括号中,但不能用于单中括号中

    2、test简单实例如下,可以查看man test 获得详细的帮助

    [root@backup ~]# test -f /etc/passwd && echo 1 || echo 0
    1
    [root@backup ~]# test -f /etc/passwd11 && echo 1 || echo 0
    0

    3、[] 但中括号实例

    [root@backup ~]# [ -f /etc/passwd ]&& echo 1 || echo 0
    1
    [root@backup ~]# [ -f /etc/passwd11 ]&& echo 1 || echo 0
    0

    4、[[]]双中括号实例

    [root@backup ~]# [[ 3 > 2 ]]&& echo 1 || echo 0
    1
    [root@backup ~]# [[ 3 > 4 ]]&& echo 1 || echo 0
    0

    5、文件测试表达式

    [root@backup ~]# [ -d /etc/ ]&& echo 1 || echo 0
    1
    [root@backup ~]#
    [root@backup ~]# [ -d /etc/11 ]&& echo 1 || echo 0
    0

    6、字符串测试表达式

    [root@backup ~]# [ -n "abc" ]&& echo 1 || echo 0
    1

    [root@backup ~]# [ -z " " ]&& echo 1 || echo 0
    0
    [root@backup ~]# [ "ab" = "ab" ]&& echo 1 || echo 0
    1
    [root@backup ~]# [ "ab" != "ab" ]&& echo 1 || echo 0
    0

     观察系统脚本的写法

    7、整数比较

    [root@backup ~]# [ 2 -lt 3 ]&&echo 1||echo 0
    1
    [root@backup ~]# [ 2 -gt 3 ]&&echo 1||echo 0
    0

    比较两个整数的大小
    [root@backup ~]# cat 1.sh 
    #!/bin/bash
    #no.1
    a=$1
    b=$2
    [ $# -ne 2 ]&&{
      echo "USAGE:"$0 "num1 num2"
      exit 1
    }
    #no.2
    expr $a + 10  &>/dev/dull
    RETVAL1=$?
    expr $b + 10 &>/dev/dull
    RETVAL2=$?
    [ $RETVAL1 -eq 0 -a $RETVAL2 -eq 0 ]||{
      echo "pls input two int nums: "  exit 2
    }
    
    #no.3
    [ $a -gt $b ] && echo "$a>$b"||{
    [ $a -eq $b ] && echo "$a=$b"||echo "$a<$b"
    
    }
    [root@backup ~]# sh 1.sh 1 2
    1<2
    [root@backup ~]# sh 1.sh 3 2
    3>2
    [root@backup ~]# sh 1.sh 2 2
    2=2


    改用read方式

    [root@backup ~]# cat 1.sh
    #!/bin/bash
    #no.1
    read -p "Pls input two num: " a b
    [ -z "$a" ]||[ -z "$b" ]&&{
    echo "pls input two num again"
    exit 1
    }
    #no.2
    expr $a + 10 &>/dev/dull
    RETVAL1=$?
    expr $b + 10 &>/dev/dull
    RETVAL2=$?
    test $RETVAL1 -eq 0 -a $RETVAL2 -eq 0 ||{
    echo "pls input two int nums: "
    exit 2
    }

    
    

    #no.3
    [ $a -gt $b ] && echo "$a>$b"
    [ $a -lt $b ] && echo "$a<$b"
    [ $a -eq $b ] && echo "$a=$b"

    
    

    [root@backup ~]# sh 1.sh
    Pls input two num: 1 1
    1=1
    [root@backup ~]# sh 1.sh
    Pls input two num: 1 2
    1<2
    [root@backup ~]# sh 1.sh
    Pls input two num: 2 1
    2>1

  • 相关阅读:
    Redis常用操作命令
    redis-sentinel.conf配置项详解
    Kafka常用命令
    go modules的使用姿势
    GO语言密码加解密(bcrypt)
    ssh-copy-id 秘钥分发报错
    k8s 命令提示
    算法与数据结构(持续更新)
    【spring】 @PostConstruct注解
    Spring Boot 整合Redis
  • 原文地址:https://www.cnblogs.com/hellojackyleon/p/9016259.html
Copyright © 2020-2023  润新知