条件测试以及if,case语句

Posted 老张学coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条件测试以及if,case语句相关的知识,希望对你有一定的参考价值。

一、条件测试

Shell环境==根据命令执行后的返回状态值($?)==来判断是否执行成功,当返回值为0(真true)表示命令或者阿胶本执行成功,返回值为非0值(假flase)时表示失败或异常

1.1、test命令

功能:可以对特定条件进行测试,根据返回值来判断条件是否成功

格式:

格式一:test 条件表达式
格式二:[ 条件表达式 ] #方括号与条件表达式之间左右两边至少需要一个空格隔开

test判断:

方括号判断:

1.2、文件测试与整数测试

1.2.1、文件测试

格式:

[ 操作符 文件或目录 ]

文件测试中常用的测试操作符

-d测试是否为目录(Directory)
-e测试目录或者文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有读取权限
-w测试当前用户是否有写入权限
-x测试当前用户是否有执行权限
-L测试是否为符号链接
  • -d,-f,-e演示

  • -r,-w,-x文件权限判断演示

注意:不能能同时判断权限

  • -L软链接判断

1.2.2、整数值比较

格式:

[ 整数1 操作符 整数2 ]

整数值比较中常用的测试操作符

-eq等于
-ne不等于
-gt大于
-lt小于
-le小于或等于
-ge大于或等于
  • 演示:直接用数值

  • 演示:用变量

  • 用双括号进行比较(可以用符号进行操作)
[root@localhost data]# ((4>5))
[root@localhost data]# echo $?
1
[root@localhost data]# ((4<5))
[root@localhost data]# echo $?
0
[root@localhost data]# [[ 4/<5 ]]
[root@localhost data]# echo $?
0
[root@localhost data]# [[ 4/>5 ]]
[root@localhost data]# echo $?
1

补充1:who|wc -l查看用户数量

格式:

[root@localhost data]# [ $(who |wc -l) -lt 5 ] && echo "few"
few

补充2:用FreeCC查看内存使用情况

格式:

[root@localhost data]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1984         727          90           9        1165         996
Swap:             3           0           3
[root@localhost data]# free -m| grep "Mem:"
Mem:           1984         727          90           9        1165         996
[root@localhost data]# free -m | grep 'Mem:' |awk '{print $4}'
90
[root@localhost data]# freecc='free -m | grep 'Mem:' |awk '{print $4}''
bash: }: 未找到命令...
[root@localhost data]# freecc=`free -m | grep 'Mem:' |awk '{print $4}'`
[root@localhost data]# echo $freecc
90
[root@localhost data]# [ $freecc -lt 100 ] && echo "警告:当前内存仅有${freecc}MB,低于警戒值100MB!!"
警告:当前内存仅有90MB,低于警戒值100MB!!
[root@localhost data]#

1.3、字符串测试与逻辑测试

1.3.1、字符串测试

格式:

格式一:
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]

格式二:
[ -z 字符串 ]

常用操作符:

=字符串内容相同
!=字符串内容不同,!表示取反的意思
-z字符串内容为空
-n检查是否有字符串存在

操作:=,!=测试

操作:-z判断是否为空字符串

操作:测试当前语言环境

1.3.2、逻辑测试

格式:

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

常用的测试操作符:

-a或&&逻辑与,“而且“的意思
-o或||逻辑与,”或者“的意思
逻辑否

  • 括号中用符号操作符&&

注意:文字操作符(在括号里)用单方括号即可,符号操作符(在括号里)用双方括号

ping主机shell测试:

代码:

#!/bin/bash
#发送三个包,每个包间隔时间,ping2秒停止
ping -c 3 -i 0.5 -w 2 $1 &> /dev/null && echo "$1 is online!" || echo "$1 is off"

批量ping主机:

不用循环无法进行批量ping主机

二、if语句

2.1、if单分支语句

以磁盘占用为例:

[root@localhost /]# total=`df |grep sda3 |awk '{print $2}'`
[root@localhost /]# used=`df | grep sda3 |awk '{print $3}'`
[root@localhost /]# echo  $total $used
62366976 9626148

#!/bin/bash
total=`df |grep sda3 |awk '{print $2}'`
used=`df | grep sda3 |awk '{print $3}'`
percent=$(echo "scale=2;$used / $total * 100 "|bc | awk -F '.' '{print $1}')
if [ $percent -ge 14 ]
then
    echo "警告!磁盘空间不足!!${percent}%" #用%号,看起来更美观
fi

2.2、if双分支语句

#!/bin/bash
netstat -natp | grep :80 &> /dev/null
if [ $? -eq 0 ];then
    echo "http服务正常运行"
else
    echo "http服务未开启,正在开启服务 。。。。"
systemctl start httpd  && echo "服务开启成功"

fi

2.3、if多分支语句

格式:

if 条件测试操作1
  then cmd1
elif 条件测试操作1
  then cmd2
else
cmd3
fi

案例:判断成绩优秀程度

要求:

#!/bin/bash
read -p "请输入你的成绩(0-100):" score
if [[ $score -eq 100 ]];then
    echo "满分,你真优秀"
elif [ $score -ge 90 ] && [ $score -le 99 ];then
    echo "再接再厉,错误抄写10遍 "
elif [ $score -ge 70 ] && [ $score -le 89 ];then
    echo "抄20遍"
elif [[ $score -gt 59 && $score -lt 70 ]];then
    echo "错题30遍"
elif [[ $score -lt 60 && $score -ge 0 ]];then
    echo "全抄30遍"
else
    echo "输入有误,请重新输入"
fi

案例:判断目录是否存在(不存在则为true,接着下面的命令),如果不存在就新建一个目录

代码:

[ ! -d test ] && mkdir test

 [ -d test123 ] || mkdir test123

三、case语句

3.1、case多分支结构

格式:

case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2;
;;
*)
默认命令序列
esac

案例:将上面的成绩优秀程度用case表示

代码:

#!/bin/bash
read -p "请输入你的分数(0-100):" score
[ $score -ge 90 -a $score -le 100 ] && a="great"
[ $score -ge 70 -a $score -le 89 ] && a="medium"
[ $score -ge 60 -a $score -le 69 ] && a="pass"
[ $score -lt 60 -a $score -ge 0 ] && a="unpass"


case $a in
great)
    echo "$score分,秀儿"
;;

medium)
 echo "$score分,soso"
;;

pass)
 echo "$score分,just soso"
;;

unpass)
    echo "$score分,flase"
;;
*)

    echo "输入有误"

esac

验证:

以上是关于条件测试以及if,case语句的主要内容,如果未能解决你的问题,请参考以下文章

条件测试以及if,case语句

Shell条件测试)

shell脚本——编程条件语句(条件测试if语句case分支语句)

Shell脚本条件测试if语句case语句!

Shell编程之条件语句——if语句case语句

条件测试与if及case语句的应用(实例验证)