####################test 命令 ####################
测试特定的表达式是否成立, 当条件成立时, 测试语句的返回值为 0, 否则为其他数值
格式 1:test 条件表达式
格式 2:[条件表达式]
.
文件测试
[ 操作符 文件或目录 ]
-d: 测试是否为目录(Directory)
-e: 测试目录或文件是否存在(Exist)
-f: 测试是否为文件(File)
-r: 测试当前用户是否有权限读取(Read)
-w: 测试当前用户是否有权限写入(Write)
-x: 测试当前用户是否有权限执行(eXcute)
- .
- [root@localhost ~]# [ -d /media/cdrom ]
- [root@localhost ~]# echo $?
- 0
- [root@localhost ~]# [ -d /media/cdrom/Server ]
- [root@localhost ~]# echo $?
- 1
- [root@localhost ~]# [ -d /media/cdrom ] && echo "YES"
- YES
- .
- #################### 整数值比较 ####################
[ 整数 1 操作符 整数 2 ]
常用的测试操作符
-eq: 等于(Equal)
-ne: 不等于(Not Equal)
-gt: 大于(Greater Than)
-lt: 小于(Lesser Than)
-le: 小于或等于(Lesser or Equal)
-ge: 大于或等于(Greater or Equal)
- .
- Unum=who | wc -l ### 查看当前以登录用户数
- [ $Unum -gt 2 ] && echo "Too many." ### 如果大于 2 就显示 Too many. 小于或等于则不提示
Too many.
- .
- FreeCC=$( free -m | grep "Mem:" | awk '{print $6}' ) ### 查看物理内存 (Mem) 当低于 1024MB 时输出具体值
- [ $FreeCC -lt 1024 ] && echo ${FreeCC}MB
- .
- #################### 字符串比较 ####################
格式
[ 字符串 1 = 字符串 2 ]
[ 字符串 1 != 字符串 2 ]
[ -z 字符串 ]
常用的测试操作符
=: 字符串内容相同
!=: 字符串内容不同,! 号表示相反的意思
-z: 字符串内容为空
- .
- echo $LANG
- [ $LANG != "en.US" ] && echo "Not en.us"
- .
- read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[ $ACK = "yes" ] && echo "覆盖"
覆盖
- .
- read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?no
[ $ACK = "no" ] && echo "不覆盖"
不覆盖
- .
- #################### 逻辑测试 ####################
格式 1:[ 表达式 1 ] 操作符 [ 表达式 2 ] ...
格式 2: 命令 1 操作符 命令 2 ...
常用的测试操作符
-a 或 &&: 逻辑与,"而且" 的意思
-o 或 ||: 逻辑或,"或者" 的意思
!: 逻辑否, 相反的
- .
- uname -r
- Mnum=$(uname -r | awk -F. '{print $1}')
- Snum=$(uname -r | awk -F. '{print $2}')
- [ $Mnum -ge 3 ] && [ $Snum -gt 4 ] && echo "符合要求" ### 前面两个都成立, 则输出
- .
- ####################if 语句的结构 #################
- .
1, 单分支结构
if 条件测试
then
命令判断
fi
.
判断挂载点目录, 若不存在则自动创建
- [root@localhost ~]# cat chkmountdir.sh
- #!/bin/bash
- MOUNT_DIR="/media/cdrom/"
- if [ ! -d $MOUNT_DIR ]
- then
- mkdir -p $MOUNT_DIR
- fi
- .
2, 双分支结构
if 条件测试
then
命令序列 1
else
命令序列 2
fi
.
判断目标主机是否存活, 显示检测结果
- [root@localhost ~]# cat pinghost.sh
- #!/bin/bash
- ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
- if [ $? -eq 0 ]
- then
- echo "Host $1 is up."
- else
- echo "Host $1 is down."
- fi
- .
- .
3, 多分支结构
if 条件测试操作 1
then
命令序列 1
elif 条件测试操作 2
then
命令序列 2
else
命令序列 3
fi
.
判断分数范围, 分出优秀, 合格, 不合格三档
- [root@localhost ~]# vi gradediv.sh
- #!/bin/bash
- read -p "请输入您的分数(0-100):" GRADE
- if [ $GRADE -gt 100 ]
- then
- echo "$GRADE 分, 大于 100 分了, 输入有问题"
- elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
- then
- echo "$GRADE 分, 优秀!"
- elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
- then
- echo "$GRADE 分, 合格!"
- else
- echo "$GRADE 分, 不合格!"
- fi
- .
- [root@localhost opt]#chmode +x gradediv.sh
- [root@localhost opt]# ./gradediv.sh
请输入您的分数(0-100):101
101 分, 大于 100 分了, 输入有问题
[root@localhost opt]# ./gradediv.sh
请输入您的分数(0-100):88
88 分, 优秀!
[root@localhost opt]# ./gradediv.sh
请输入您的分数(0-100):0
0 分, 不合格!
Shell 脚本 (二)文本测试, 整数值比较, 字符串比较 条件测试操作 if 语句应用实例
来源: http://www.bubuko.com/infodetail-2768739.html