test命令
格式1:test 条件表达式
格式2:[ 条件表达式 ] (前后至少应有一个空格)
常用的测试操作符
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(eXcute)
test -e /etc/passwd
# 测试/etc/passwd这个文件或者目录是否存在
echo $?
输出0表示条件成立,也就是有这个文件或者目录
但是在实际中我们不经常使用这种语法,我们常用的语法为[ 条件表达式 ]这种格式
[ -d /media/cdrom ]
# 是否有/media/cdrom这个文件
echo $?
只有0代表成立,也就是有,非0的任何数字都是无(不成立)
这个就是文件存在
附加:(提前看看后面会讲)
[ -d /etc/sysconfig/ ] && echo "YES"
&&逻辑与,“而且”的意思
意思就是只要成立了就一起执行与后面的
整数值比较
格式:[ 整数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"
[ $(cat /etc/passwd | wc -l) -ge 27 ] && echo "用户数量大于等于27"
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
查看一下当前的系统语言环境
[ $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
[ $(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
这个就是一个单分支案例 ,判断是否有文件
双分支案例,如果可以还是不可以ping通输出的内容不一样
这个是一个多分支的if语句,只要你需要可以写上无数个elif