shell-----条件测试和条件语句

目录

 

一.文件测试

二.数值比较

三.字符串比较

四.逻辑测试

五.if语句的结构与实例


一.文件测试

  • test命令测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值
  • 常用的测试操作符
  • -d:测试是否为目录(directory)
  • -f:测试是否为文件(file)
  • -e:测试目录或者文件是否存在(exist)
  • -r:测试当前用户是否由权限读取(read)
  • -w:测试当前用户是否由权限写入(write)
  • -x:测试当前用户是否有权限执行(excute)
  • 文件测试的两种书写方式:test 操作符 文件或目录 ;[  操作符    文件或目录  ]
  • 实例如下所示
[root@localhost ~]# test -d /mnt
[root@localhost ~]# echo $?          //$?上一行命令执行后返回的状态
0                            //当返回状态值为0时,表示执行正常,非0值表示执行异常或出错
[root@localhost ~]# test -f /mnt
[root@localhost ~]# echo $?
1
[root@localhost ~]# 
[root@localhost ~]# [ -f /mnt ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d /mnt ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# 
  • &&逻辑与,||逻辑或,!取反,示例如下:
[root@localhost ~]# [ -d /mnt ] && echo "yes"
yes
[root@localhost ~]# [ -f /mnt ] && echo "yes"   //逻辑与必须两个都正确才能执行
[root@localhost ~]# [ -f /mnt ] || echo "yes"    //逻辑或两个条件满足一个即可执行
yes
[root@localhost ~]# [ ! -f /mnt ] && echo "yes" //取反,使得原来的结果与现在完全相反
yes
[root@localhost ~]# 

二.数值比较

  • 常用的测试操作符
  • -eq:等于(equal)
  • -ne:不等于(not equal)
  • -gt:大于(greater than)
  • -lt:小于(lesser or equal)
  • -le:小于或等于(lesser or equal)
  • -ge:大于或等于(greater or equal)
  • 整数值之间的比较:[  整数1 操作符  整数2 ],示例如下
[root@localhost ~]# [ `ps aux | wc -l` -gt 100 ] && echo "进程过多"
进程过多
[root@localhost ~]# [ $(ps aux | wc -l) -gt 100 ] && echo "进程过多"
进程过多
[root@localhost ~]# ps aux | wc -l  //统计进程数量
146
[root@localhost ~]# free -m      //查看物理内存和虚拟内存
              total        used        free      shared  buff/cache   available
Mem:            976         295         295           7         385         476
Swap:          4095           0        4095
[root@localhost ~]# [ $(free -m | grep "Mem" | awk '{print $4}') -gt 100 ] && echo "有空闲内存"
有空闲内存
//上述命令是,筛选物理内存的第四列的free空间,再看是否比100大,如果比100大,则输出有空闲内存

三.字符串比较

  • 常用的测试操作符
  • =:字符串内容相同
  • !=:字符串内容不同
  • -z:字符串内容为空
  • 使用格式:[  字符串1  =   字符串2   ]  ;[   字符串1  =  字符串2  ];[   -z  字符串 ] ,实例如下: 
[root@localhost ~]# echo $LANG    //LANG查看字符使用模式
zh_CN.UTF-8
[root@localhost ~]# [ $LANG = zh_CN.UTF-8 ] && echo "字符正确"
字符正确
[root@localhost ~]# [ $LANG != zh_CN.UTF-8 ] && echo "字符正确"
[root@localhost ~]# 
  • 使用脚本创建目录,如下所示
[root@localhost mnt]# vim a.sh

#!/bin/bash
read -p "是否创建目录yes/no:" ack     //写入yes或no
[ -d /mnt/share ] && echo "已经创建"   //判断是否存在/mnt/share目录
[ $ack = "yes" ] && mkdir /mnt/share | echo "创建成功"  //创建/mnt/share目录
[root@localhost mnt]# sh a.sh    //执行脚本
是否创建目录yes/no:yes
创建成功
[root@localhost mnt]# ls
a.sh  share
[root@localhost mnt]# vim a.sh
[root@localhost mnt]# sh a.sh
是否创建目录yes/no:yes
已经创建
创建成功
mkdir: 无法创建目录"/mnt/share": 文件已存在


  • 运算符“i++”与“++i”,let命令
[root@localhost mnt]# i=1
[root@localhost mnt]# let i=i++
[root@localhost mnt]# echo $i
1
[root@localhost mnt]# i=1
[root@localhost mnt]# let i=++i
[root@localhost mnt]# echo $i
2

//i=i++,是先赋值,再计算
//i=++i,是先计算,再赋值

四.逻辑测试

  • 常用的测试操作符
  • -a或&&:逻辑与,而且
  • -o或||:逻辑或,或者
  • !:逻辑否
  • 使用格式为:[  表达式1   ]   操作符  [  表达式2 ];命令1  操作符  命令2  ,示例如下
[root@localhost mnt]# [ -d /etc ] && [ -r /etc ] && echo "you can open it"
you can open it
[root@localhost mnt]# [ -d /etc ] || [ -d /opt ] && echo "ok"
ok
[root@localhost mnt]# 

五.if语句的结构与实例

  • 单分支结构
if 条件测试操作
then 
    命令序列
fi
  • 双分支结构
if  条件测试操作
then 
    命令序列1
else
    命令序列2
fi
  • 多分支结构
if 条件测试操作
then
    命令序列1
elif 条件测试操作
  then
      命令序列2
else
   命令序列3
fi  
  • 多分支嵌套结构
if 条件测试操作1
    then
        命令序列1
     elif 条件测试操作2
        then
            命令序列2
     elif 条件测试操作3
        then
            命令序列3
    else
        if 条件测试操作4
           then
                命令序列4
           else
                命令序列5
        fi
fi
  • 编写简单计算器shell脚本
[root@localhost opt]# vim e.sh
#设置闪烁特效
echo -e "\033[5;46;30m-------------------------------\033[0m"  
echo "           简单计算器         "
echo -e "\033[5;46;30m-------------------------------\033[0m" 
#输入数据
read -p "输入第一个整数:" number1  
#选择运算符
read -p "选择运算符 +(加法) , -(减法) , x(乘法) , /(除法) , % (取余) :" operator                            
read -p "输入第二个整数:" number2
#if语句的嵌套
if [ $operator == "+" ]
    then
      sum=`expr $number1 + $number2`
      echo $sum
    elif [ $operator == "-" ]
        then
         sum=`expr $number1 - $number2`
         echo $sum
    elif [ $operator == "x" ]
        then
         sum=`expr $number1 \* $number2`
         echo $sum
    elif [ $operator == "/" ]
        then
         sum=`expr $number1 / $number2`
         echo $sum
    elif [ $operator == "%" ]
        then
         sum=`expr $number1 % $number2`
         echo $sum
  else
       echo "输入错误"
fi
[root@localhost opt]# sh e.sh
-------------------------------
           简单计算器         
-------------------------------
输入第一个整数:9
选择运算符 +(加法) , -(减法) , x(乘法) , /(除法) , % (取余) :%
输入第二个整数:2
1

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值