目录
选项 -a 和 -e 都可以判断文件是否存在

只是 -a 选项在取反时有问题,建议都使用 -e

test -e /dev = [ -e /dev ]


[ ] 不支持通配符和正则表达式
[ [ ] ] 支持通配符和正则表达式
补充:
- 操作符:
- -d:测试是否为目录(Directory)
- -e:测试目录或文件是否存在(Exist)
- -a:测试目录或文件是否存在(Exist)
- -f:测试是否为文件(File)
- -r:测试当前用户是否有权限读取(Read)
- -w:测试当前用户是否有权限写入(Write)
- -x:测试当前用户是否有权限执行(eXcute)
- -L: 测试是否为软连接文件
-
- 属性测试补充:
- -s FILE #是否存在且非空
- -t fd #fd 文件描述符是否在某终端已经打开
- -N FILE #文件自从上一次被读取之后是否被修改过
- -O FILE #当前有效用户是否为文件属主
- -G FILE #当前有效用户是否为文件属组

[ 整数1 操作符 整数2 ] 公式
-eq:第一个数等于(Equal)第二个数
-ne:第一个数不等于(Not Equal)第二个数
-gt:第一个数大于(Greater Than)第二个数
-lt:第一个数小于(Lesser Than)第二个数
-le:第一个数小于或等于(Lesser or Equal)第二个数
-ge:第一个数大于或等于(Greater or Equal)第二个数

常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,! 号表示相反的意思
-z:字符串内容为空
-n: 字符是否存在
格式
[ 字符串1 = 字符串2 ] 是否相同
[ 字符串1 != 字符串2 ] 是否不相同

[ -z 字符串 ] 是否为空
[ -n 字符串 ] 字符是否存在


格式1:[ 表达式1 ] 操作符 [ 表达式2 ] ... 格式2:命令1 操作符 命令2 ...
常见条件
-a或&&:逻辑与,“而且”的意思全真才为真,一假即为假
-o或||:逻辑或,“或者”的意思一真即为真,全假才为假
!:逻辑否

[ ] 不支持通配符和正则表达式
[ [ ] ] 支持通配符和正则表达式
[ [ == str (通配符) ] ]
[ [ =~ str (正则表达式) ] ]

(CMD1;CMD2;...)可以将多个命令组合在一起,批量执行
{空格CMD1;CMD2;...; } 可以将多个命令组合在一起,批量执行
区别:

单分支
双分支
多分支
1. 判断磁盘使用率
- #!/bin/bash
-
- use=`df -h | grep boot | awk '{print $5}' | tr -d % `
-
- [ $use -gt 80 ] && echo "磁盘使用率过高" || echo "磁盘使用率正常"
2. 监控磁盘使用率并邮箱告知
- #!/bin/bash
- use=$(df -h |grep "/dev/sd" |awk '{print $5}'|awk -F % '{print $1}')
- [ $use -gt 80 ]&& echo "磁盘使用量过高" | mail -s warning 111111111@qq.com ||echo "磁盘使用量正常"
- #!/bin/bash
- use=80
- disk=`df|grep "sd"|tr -s " "|cut -d " " -f5|cut -d "%" -f1`
- [ $disk -ge $use ] && echo "磁盘使用率过高"|mail -s test 111111111@qq.com
3. 判断网络连通性
- #!/bin/bash
- ping -c 3 172.16.233.11
- if
- [ $? = 0 ]
- then
- echo "与真机网络通顺"
- fi
- echo "与真机网络不通"
4. 判断服务是否开启
- #!/bin/bash
-
- ss -natp | grep 80
-
- if [ $? -eq 0 ]
- then
- echo "httpd服务正常开启"
- else
- systemctl start httpd &>/dev/null
-
- if [ $? -eq 0 ]
- then
- echo "httpd 服务已开启"
- else
- echo "httpd 服务启动失败"
- fi
-
- fi
5. 判断是否为超级管理员
- #!/bin/bash
- if [ "$USER" != "root" ]
- then
- echo "非管理员用户无权限操作"
- else
- echo "是管理员用户"
- fi
6. 判断分数
- #!/bin/bash
- read -p "请输入你的考试分数:" grade
-
- if [ $grade -ge 85 ]&& [ $grade -le 100 ]
- then
- echo "你的成绩为$grade"
- echo "你的成绩为优秀"
-
- elif [ $grade -ge 70 ]&&[ $grade -le 84 ]
- then
- echo "你的成绩为$grade"
- echo "你的成绩为良好"
- elif [ $grade -ge 60 ]&&[ $grade -le 69 ]
- then
- echo "你的成绩为$grade"
- echo "你的成绩为合格"
- else
- echo "你的成绩为$grade"
- echo "你的成绩不合格"
- fi
- #!/bin/bash
- read -p "请输入你的分数" score
-
- case $score in
- 100)
- echo "$score 你太优秀了"
- ;;
- [89][0-9])
- echo "$score 表现不错"
- ;;
- [67][0-9])
- echo "$score 你及格了"
- ;;
- [0-9]|[1-5][0-9])
- echo "$score 你不及格"
- ;;
- *)
- echo "输入有误"
- esac
7. 判断时间
- #!/bin/bash
- h=`date +%H`
- if [ $h -ge 6 -a $h -le 10 ]
- then
- echo "早上好"
- elif [ $h -ge 11 -a $h -le 13 ]
- then
- echo "中午好"
- elif [ $h -ge 14 -a $h -le 18 ]
- then
- echo "下午好"
- else
- echo "晚上好"
- fi
8. 判断yes或no
- read -p "Do you agree(yes/no)? " INPUT
- INPUT=`echo $INPUT | tr 'A-Z' 'a-z'`
- #转换大小写
- case $INPUT in
- y|yes)
- echo "You input is YES"
- ;;
- n|no)
- echo "You input is NO"
- ;;
- *)
- echo "Input fales,please input yes or no!"
- esac
- read -p "Do you agree(yes/no)? " INPUT
- case $INPUT in
- [yY]|[Yy][Ee][Ss])
- echo "You input is YES"
- ;;
- [Nn]|[Nn][Oo])
- echo "You input is NO"
- ;;
- *)
- echo "Input fales,please input yes or no!"
-
- esac
9. 包剪锤游戏
- #!/bin/bash
- m=`echo $[RANDOM%3+1]`
- read -p "请输入 1.石头2.剪刀3.布:" h
-
-
- if [ $m -eq $h ]
- then
- echo "打成平局"
- bash $0
- elif [ $h -eq 1 -a $m -eq 2 -o $h -eq 2 -a $m -eq 3 -o $h -eq 3 -a $m -eq 1 ]
- then
- echo "人类胜利"
- else
- echo "机器胜利"
- fi
- #!/bin/bash
- key=`echo $[RANDOM%3+1]`
- read -p "请输入1包子 2剪子 3 锤子:" num
-
- case $num in
- 1)
- num="包子"
- ;;
- 2)
- num="剪子"
- ;;
- 3)
- num="锤子"
- ;;
- *)
- echo "你输错了!"
- exit
- ;;
- esac
-
- case $key in
- 1)
- key="包子"
- ;;
- 2)
- key="剪子"
- ;;
- 3)
- key="锤子"
- ;;
- esac
-
-
- if [ $num = "包子" -a $key = "锤子" -o $num = "剪子" -a $key = "包子" -o $num = "锤子" -a $key = "剪子" ]
- then
-
- echo 机器出的是$key
- echo 你出的是$num
-
- echo "人类胜利"
- elif [ $num = $key ]
- then
- echo 机器出的是$key
- echo 你出的是$num
-
- echo "打成平局再来一次"
- else
-
- echo 机器出的是$key
- echo 你出的是$num
- echo "机器胜利"
- fi
10. 跳板机
- #!/bin/bash
- web1="192.168.91.101"
- mysql="192.168.91.102"
- docker="192.168.91.103"
-
-
- #打印菜单
- cat <<EOF
- 1.web1
- 2.mysql
- 3.doker
- EOF
-
- read -p "请输入数字(1-3):" num
-
-
- case $num in
-
-
- 1)
- ssh $web1
- ;;
-
- 2)
- ssh $mysql
- ;;
-
- 3)
- ssh $doker
- ;;
-
- esac