Linux:shell脚本:基础使用(2)《逻辑测试if语句》
  TEZNKK3IfmPf 2024年05月17日 37 0

test命令

格式1:test  条件表达式

格式2:[  条件表达式  ]  (前后至少应有一个空格)

常用的测试操作符

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(eXcute)

test -e /etc/passwd

# 测试/etc/passwd这个文件或者目录是否存在 

echo $?

输出0表示条件成立,也就是有这个文件或者目录

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

 但是在实际中我们不经常使用这种语法,我们常用的语法为[  条件表达式  ]这种格式

  [  -d /media/cdrom  ]

 # 是否有/media/cdrom这个文件

echo $?

只有0代表成立,也就是有,非0的任何数字都是无(不成立) 

 Linux:shell脚本:基础使用(2)《逻辑测试if语句》

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

这个就是文件存在

 附加:(提前看看后面会讲)

[ -d /etc/sysconfig/ ] && echo "YES"

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

&&逻辑与,“而且”的意思

意思就是只要成立了就一起执行与后面的 


整数值比较 

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

    常用的测试操作符

-eq:等于(Equal)

-ne:不等于(Not Equal)

-gt:大于(Greater Than)

-lt:小于(Lesser Than)

-le:小于或等于(Lesser or Equal)

-ge:大于或等于(Greater or Equal)

cat /etc/passwd | wc -l

# 查看有几行

[ $(cat /etc/passwd | wc -l) -gt 10 ] && echo "用户数量大于10"

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

 

[ $(cat /etc/passwd | wc -l) -ge 27 ] && echo "用户数量大于等于27"

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

 

aaa=$(free -m | grep -i "mem" | awk '{print $4}')

# 查看空闲内存将值赋予给变量aaa

[ $aaa -lt 10240 ] && echo "空闲内存为 ${aaa}MB"

# 空闲内存是否 < 10240MB 如果小于了就会执行后面的话


 字符串比较

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

格式2:[  -z  字符串 ]

常用的测试操作符

=:字符串内容相同

!=:字符串内容不同,! 号表示相反的意思

-z:字符串内容为空

echo $LANG

Linux:shell脚本:基础使用(2)《逻辑测试if语句》  

查看一下当前的系统语言环境

 

 [ $LANG !=  "en.US" ] && echo  "系统语言不是en.US"

# 如果输出的字符串不是en.US则执行后面的语句


附加:(提前看看后面会讲)

read -p "是否覆盖现有文件(yes/no)?"  asd
[ $asd = "yes" ] && echo "覆盖" || echo "不覆盖"

# 如果交互输入了yes那执行第二句时候就会输出覆盖,相反则不覆盖


逻辑测试 

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

常用的测试操作符

-a或&&:逻辑与,“而且”的意思

-o或||:逻辑或,“或者”的意思

!:逻辑否

echo $USER

#这个是显示当前登录用户的变量

[ $USER != "test" ]  &&  echo "当前用户不是test"

# 当前前面的条件成立会输出&&后面的

 

[ -d /media/cdrom ] && echo "YES" || echo "NO"

# 测试是否有文件,如果有的话(成立)就输出yes,如果没有(不成立)就输出no

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

 

 [ $(ps aux | wc -l) -lt 100 ] && echo "YES" || echo "NO"

 # 这个是测试当前进程数是否小于100

 

rpm -q sysstatpackage 
 [ $? -eq 0 ] && echo "Installed." || echo "Not installed."

测试软件是否安装  如果安装了则输出installed  如果没安装就输出 not installed

 

vim rpm_install.sh

#!/bin/bash

# 查看rpm软件是否已安装
rpm -q $1 &> /dev/null

# 已安装输出结果,未安装则进行安装

[ $? -eq 0 ] && echo "$1 软件已安装"  || yum -y install $1 &> /dev/null

if语句

【单分支结构】 

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

 【双分支结构】

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

【多分支结构】

if  条件测试操作1

    then  命令序列1

elif  条件测试操作2 

    then  命令序列2

else

  命令序列3

fi

 Linux:shell脚本:基础使用(2)《逻辑测试if语句》

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

这个就是一个单分支案例 ,判断是否有文件

 Linux:shell脚本:基础使用(2)《逻辑测试if语句》

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

双分支案例,如果可以还是不可以ping通输出的内容不一样 

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

Linux:shell脚本:基础使用(2)《逻辑测试if语句》

这个是一个多分支的if语句,只要你需要可以写上无数个elif

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年05月17日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   12天前   21   0   0 shell
TEZNKK3IfmPf