文件测试

-e file 存在则为真
-f file 是否为文件
-d file 是否为目录

-x file 是否可执行
-r file 是否可读
-w file 是否可写

也有用这种写法的:test -e /etc/hosts

  1. [ -e /etc/hosts ] && echo true
  2. [ -f /etc/hosts ] && echo true || echo false
  3. [ -d /etc ] && echo true || echo false
  4. [ -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

image.png

数值比较

-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"

补充知识点

如何查看变量

env
set

变量生效顺序

/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}"