Shell编程之条件语句


条件测试

  • 文件测试
  • 整数测试
  • 字符串与逻辑测试

IF语句

  • if单分支语句
  • if双分支语句
  • if多分支语句
  • if嵌套

条件测试操作

test命令

  • 测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
格式1: test 条件表达式
格式2: [ 条件表达式 ]      //至少应有一个空格

文件测试

[ 操作符 文件或目录 ]

常用的测试操作符

  • -d:测试是否为目录
  • -e:测试目录或文件是否存在
  • -f:测试是否为文件
  • -r:测试当前用户是否有权限读取
  • -w:测试当前用户是否有权限写入
  • -x:测试当前用户是否有权限执行
[root@localhost ~]# [ -d /media/cdrom ]
[root@localhost ~]# echo $?
0                                             //返回0表示条件成立
[root@localhost ~]# [ -d /media/cdrom/Server ]
[root@localhost ~]# echo $?
1                                             //返回1表示条件不成立
[root@localhost ~]# [ -d /media/cdrom ] && echo "YES"     //&&逻辑与,“而且”的意思
YES

整数值比较

[ 整数1 操作符 整数2]

常用的测试操作符

  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -lt:小于
  • -le:小于或等于
  • -ge:大于或等于
[root@localhost ~]# who |wc -l
7
[root@localhost ~]# [ $(who |wc -1) -gt 5] && echo "Too many."   //用户数是否>5
Too many.
[root@localhost ~]# [ $(who |wc -1) -ge 10 ] && echo">= 10."      //用户数是否>=10
[root@localhost ~]# FreeCC=$(free -m | grep "Mem:”| awk '{print $6}`)
[root@localhost ~]# [ $FreeCC -It 1024 ] && echo ${FreeCC}MB        //空闲内存是否< 1024MB  
275MB

字符串比较

  • 格式1

    [ 字符串1 = 字符串2 ]
    [ 字符串1 != 字符串2 ]
  • 格式2

    [ -z 字符串 ]

常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,!号表示相反的意思
  • -z:字符串内容为空
[root@localhost ~]# echo $LANG            //测试当前语言环境
zh_ CN.UTF-8
[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US"
Not en.US
[root@localhost ~]# read -p“是否覆盖现有文件(yes/no) ?”ACK    //测试读入的字符串是否为yes
是否覆盖现有文件(yes/no) ? yes
[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"
覆盖

逻辑测试

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

常用的测试操作符

  • -a或&&:逻辑与,“而且”的意思
  • -o或||:逻辑或,“或者”的意思
  • !:逻辑否
[root@localhost ~]#[ -dletc ] && [-r /etc] && echo “You can open it“
[root@localhost~]#[ -d/etc ] II [-d /home] && echo “ok"

if语句的分支结构

单分支结构

if 条件测试操作    
  then  命令序列     
fi                                

单分支if语句

  • 判断挂载点目录,若不存在则自动创建
    [root@localhost ~]# vim test01.sh
    #!/bin/bash
    dir="/mnt/aaa/"
    if [ !-d $dir ]              //当目录不存在时执行
    then
    mkdir -p $dir
    if

    双分支结构

if  条件测试操作
  then  命令序列1
  else  命令序列2
fi

双分支if语句

  • 判断目标主机是否存活,显示检测结果
root@localhost ~]# vim test02.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then                                  //判断ping命令的检测结果,分别给出不同的提示
  echo "Host $1 is up."
else
  echo "Host $1 is down."
fi

多分支结构

if 条件测试操作1
  then 命令序列1
elif 条件测试操作2
  then 命令序列2
else
  命令序列3
fi

多分支if语句

  • 判断分数范围,分出优秀、合格、不合格三档
    [root@localhost ~]# vim test03.sh
    #!/bin/bash
    read -p "请输入您的分数(0-100):" a
    if [ $a -ge 85 ]&&[ $a -le 10 ]
    then
    echo"$a分,优秀!"                      //判断分数所在区间,给出不同的分档结果
    elif[ $a -ge 70 ]&&[ $a -le 84 ]
    then
    echo"$a分,合格!"
    else
    echo"$a分,不合格!"
    fi

linuxboy的RSS地址:https://www.linuxboy.net/rssFeed.aspx

本文永久更新链接地址:https://www.linuxboy.net/Linux/2019-10/160961.htm

相关内容