文件测试
-e file 存在则为真
-f file 是否为文件
-d file 是否为目录
-x file 是否可执行
-r file 是否可读
-w file 是否可写
也有用这种写法的:test -e /etc/hosts
[ -e /etc/hosts ] && echo true
[ -f /etc/hosts ] && echo true || echo false
[ -d /etc ] && echo true || echo false
[ -x test.sh ] && echo true || echo false
系统函数
一定要加载函数功能,才可以使用anction命令
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
[ -f /etc/hosts ] && action "hosts existen" /bin/true || action "hosts is not" /bin/false
数值比较
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
[[]] 建议使用== != > < >= <=
测试结果:[[]] 使用>=会出现识别错误的情况,以后再了解这个是怎么回事
例题1:统计磁盘使用率如果磁盘大于5%则提示报警小于则提示oK
1.如何取出磁盘当前使用率
2.用数值表达式判断大小如果大发邮件如果小提示ok
3.测试脚本
#!/bin/bash
useDisk=`df | awk 'NR==6{print $(NF-1)}'`
[ ${useDisk%\%} -ge 6 ] && echo "磁盘使用率超过6%" || echo "磁盘使用率正常"
例题2:内存使用率超过5%则报警小于则提示ok
#!/bin/bash
useFree=`free|awk 'NR==2{print $3/$2*100}'`
[ ${useFree%%.*} -ge 5 ] && echo "内存使用率超过5%" || echo "磁盘使用率正常"
案例3:统计服务器负载,负载1分钟的值超过2则报警,小于则提示ok。须压测超过2
ab -n 20000 -c 20000 http://127.0.0.1/index. html
#!/bin/bash
useFree=`uptime | awk -F "[ ,.]" '{print $17}'`
[ ${useFree%%.*} -ge 0 ] && echo "一分钟使用率已超过上限值" || echo "正常"
多整数比较
-a and —> &&
-o or —> ||
[ 10 -gt 10 -a 20 -ge 20 ] && echo “成立” || echo “不成立”
字符串比较
AAA =””
字符串必须加双引号
-z 字符串长度0 则为真
[ -z $AAA ]
-n 字符串长度不为0 则为真
[-n “${AAA}”]
切记:使用-n判断不为空时,变量一定要加上双引号,不然无法进行判断!!!!!!!!!!
//判断是否是当前用户
[[ $USER==root ]] && echo "success" || echo "fail"
补充知识点
如何查看变量
变量生效顺序
/etc/profile 开机所有用户加载此文件
. ~/.bashrc
.bash_profile
.bashrc
/etc/bashrc
执行了/etc/profile文件,会执行.bash_profile,但因为里面有判断函数 会先去执行~/.bashrc 多看看文件,你就能发现其中的奥妙了
变量赋值注意事项
在终端下,在执行命令后想赋值给变量,需要按照下面格式
useDisk=df | awk 'NR==6{print $(NF-1)}'
“=”左右边都不能用空格,不然就会报错了
变量数值相加
#!/bin/bash
num=10
sum=0
for i in `seq ${num}`
do
sum=$[${i}+${sum}]
done
echo "${sum}"