Shell学习(四)

shell脚本开发之判断和循环

把复杂的命令执行过程,通过逻辑代码,组成一个脚本文件,再去执行该文件。(if while for)

if 语句开发

单分支

1
2
3
4
5
6
7
8
9
10
11
12
13
# 格式
if <expr>
then
echo "..."
fi

# 简化版本
if <expr>; then
echo "..."
fi

# 一行
if <expr>;then echo "...";fi

双分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 两个 if 嵌套
if <expr>
then
echo "..."
if <expr>
then
echo "..."
fi
fi

# if-else
if <expr>
then
echo "..."
else
echo "..."
fi

多分枝处理

1
2
3
4
5
6
7
8
9
if <expr>
then
echo "..."
elif <expr>
then
echo "..."
else
echo "..."
fi

实践

太简单了,给三岁小孩学刚刚好。

系统监控脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 发送邮件
mail -s "主题" 收件人 < message
# 查看新邮件
mail
# 查看归档邮件
mail -f

# 开始脚本
#!/bin/bash

# 1. 检查 linux 可用内存,内存小于100M时,发邮件给运维
# 2. 加入crontab, 每三分钟检查一次
FreeMem=`free -m | awk 'NR==2 {print $NF}'`
CHARS="Current memory is $FreeMem"

if [ "$FreeMem" -lt 12000 ]; then
echo $CHARS | tee /tmp/message.txt
mail -s "`date +%F-%T` $CHARS" feng@laptop-b4fc2bhq.localdomain < /tmp/message.txt
echo "内存不足"
fi

邮箱的使用
检测脚本

加入定时任务

1
2
crontab -l
*/3 * * * * /bin/bash /home/feng/shell/7.sh &>/dev/null

通过读数比较大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# 通过读数比较大小
a=$1
b=$2

if [ "$a" -lt "$b" ]; then
echo "yes, $a < $b"
exit 0
fi

if [ "$a" -eq "$b" ]; then
echo "yes, $a = $b"
exit 0
fi

if [ "$a" -gt "$b" ]; then
echo "yes, $a > $b"
exit 0
fi

多分枝简化

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

a=$1
b=$2

if [ "$a" -lt "$b" ]; then
echo "yes, $a < $b"
elif [ "$a" -eq "$b" ]; then
echo "yes, $a = $b"
elif [ "$a" -gt "$b" ]; then
echo "yes, $a > $b"
fi

比较大小

MySQL 监控脚本

  1. 端口监控
  2. 监控服务或者是进程数
  3. 模拟客户端访问
  4. 登录 MySQL 数据库执行 SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sudo netstat -nltp | grep 3306
sudo ss -tunlp | grep 3306
sudo lsof -i tcp:3306
nmap localhost -p 3306
echo -e "\n" | telnet 127.0.0.1 3306
ps -ef | grep mysql

#!/bin/bash

# MySQL 监控脚本,只写一种,其他的类似
if [ `netstat -nltp | grep 3306 | wc -l` = "1" ]; then
echo "MySQL is running!!!"
else
echo "MySQL is stop, Start now..."
systemctl start mariadb
fi

端口进程检查

文章作者: Shengyaqingfeng
文章链接: https://creazyboyone.github.io/shell4/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shengyaqingfeng's Blog