shell脚本2

发布于:2025-05-01 ⋅ 阅读:(40) ⋅ 点赞:(0)
  • 条件测试分类

测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值

测试命令格式:[  条件表达式  ]

文件测试

格式:[  操作符  文件或目录  ]

-d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-w:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(eXcute)

举例:

[  -d  /etc  ]

echo $?

[  -f  /etc  ]

echo $?

[  -e  /abc  ]

echo $?

[  -r    /etc/shadow  ]

echo $?

整数值比较

-eq:等于(Equal)

-ne:不等于(Not Equal)

-gt:大于(Greater Than)

-lt:小于(Lesser Than)

-le:小于或等于(Lesser or Equal)

-ge:大于或等于(Greater or Equal)

举例:

统计当前登录用户数量是否大于5

[  $(who|wc -l)  -gt  5  ]

字符串比较

格式1: [  字符串1  =  字符串2 ]

        [  字符串1  !=  字符串2 ]

格式2: [  -z  字符串 ]

[  -z  $user  ]

解释:

[ -z 字符串 ]: 检查字符串是否为空

逻辑测试

-a或&&:逻辑与,“而且”的意思

-o或||:逻辑或,“或者”的意思

!:逻辑否

  • 单分支语句

if  条件判断

then

命令序列

fi

举例:磁盘可用空间大于80%,告警

vim jiaoben.sh

        添加:

used_rate=$(df | grep /$ | awk '{print $5}' | awk -F% '{print $1}')

if [ $used_rate -gt 80 ]

then

        echo "磁盘空间不足,告告告告告告"

fi

让我逐行解释:

used_rate=$(df | grep /$ | awk '{print $5}' | awk -F% '{print $1}'):

    • df 命令用于显示磁盘空间利用情况。
    • grep /$ 用于匹配根目录(以/结尾的行),因为根目录通常是文件系统的最顶层目录。
    • awk '{print $5}' 用于提取匹配行的第五列,即磁盘使用率。
    • awk -F% '{print $1}' 用于去除百分号,只留下数字部分。
    • 最终结果赋值给变量 used_rate。

if [ $used_rate -gt 80 ]:

    • 这是一个条件判断语句,判断 $used_rate 是否大于80%。
    • -gt 是大于的意思,80% 是判断的阈值。

then:

    • 如果条件成立,则执行下面的命令。

echo "磁盘空间不足,告告告告告告":

    • 如果磁盘使用率超过80%,则输出提示信息。

fi:

    • 表示条件判断结束

  • 双分支语句

if  条件判断

then

命令序列

else

命令序列

fi

举例:

httpd服务是否开启,输出相应信息,未开启时请启动,测试主机生存状态

vim  jiaoben2.sh

添加:

netstat -lntp | grep httpd &> /dev/null

if [ $? -eq 0 ]

then

        echo "该服务正在运行中哦"

else

        echo "该服务已停止啦!"

          systemctl start httpd

echo "正在帮哥哥启动服务哦"

fi

  • 多分支语句

if  条件判断1

then

命令序列

elif   条件判断2

then

命令序列

elif   条件判断3

then

命令序列

else

命令序列

fi

举例:输入学生分数,输出成绩是否合格

vim jiaoben3.sh

添加:

read -p "请输入学士分数:" cj

if [ $cj -ge 90 ]

then

        echo "优秀"

elif [ $cj -ge 80 ]

then

        echo "良"

elif [ $cj -ge 60 ]

then

        echo "及格"

else

        echo "不及格"

fi

  • 编写ping测试脚本

vim jiaoben4.sh

添加:

ping -c 3 -i 0.2 -w 1 $1 &> /dev/null

if [ $? -eq 0 ]

then

        echo "目标主机已经建立连接"

else

        echo "目标主机已关闭"

fi

  • 编写如下服务器性能监控脚本

uptime :查看系统负载

$NF:最后一列内容

Mpstat:cpu负载率

        free:查看内存使用率

系统负载长期高于cpu核心数时,告警

vim jiaoben-1.sh

添加:

kernels=$(cat /proc/cpuinfo | grep processor |wc -l )

load=$(uptime | awk '{print $NF}' | awk -F. '{print $1}')

if [ $load -gt $kernels ]

then

        echo "cpu快烧啦!!!"

fi

Cpu使用率大于90%时,告警

vim jiaoben-2.sh

添加:

idle=$(mpstat | grep all | awk '{print $NF}' | awk -F. '{print $1}')

if [ $idle -lt 90 ]

then

        echo "Cpu使用率太高啦!"

fi

内存使用率大于90%时,告警

vim jiaoben-3.sh

添加:

used=$(free |grep Mem |awk '{print $3}')

total=$(free |grep Mem |awk '{print $2}')

used_rate=$(expr $used \* 100 / $total)

if [ $used_rate -gt 90 ]

then

        echo "内存空间不足"

fi

硬盘使用率大于80%时,告警

vim jiaoben-4.sh

添加:

used_rate=$(df | grep /$ | awk '{print $5}' | awk -F% '{print $1}')

if [ $used_rate -gt 80 ]

then

        echo "磁盘空间不足!"

fi


网站公告

今日签到

点亮在社区的每一天
去签到