网易首页 > 网易号 > 正文 申请入驻

10个【常用Shell脚本】编写

0
分享至

相信大家经常通过shell 脚本来做很多事情,今天分享10个实战与面试【常用Shell脚本】编写。

注意事项

1)开头加解释器:#!/ bin / bash

2)语法缩进,使用四个空格;多加注释说明。

3)命名建议规则:变量名大写,局部变量小写,函数名小写,名字体现出实际作用。

4)变量变量是变量的,在函数中变量local指定为局部变量,避免污染其他作用域。

5)有两个命令能帮助我调试脚本:set -e遇到执行非0时退出脚本,set-x打印执行过程。

6)写脚本一定先测试再到生产上。

1获取随机字符串或数字

获取随机8位字符串:

方法1:
#echo $ RANDOM | md5sum | cut -c 1-8
471b94f2

方法2:
#openssl rand -base64 4
vg3BEg ==

方法3:#cat
/ proc / sys / kernel / random / uuid | cut -c 1- 8
ed9e032c

获取随机8位数字:

方法1:
#回声$ RANDOM |校验和|切-c 1-8 23648321 方法2: # OpenSSL的兰特-base64 4 |校验和|切-c 1-8 38571131 方法3: # 日期+%N |切-c 1- 8 69024815

cksum:打印CRC效验和统计字节

2定义一个颜色输出字符串函数

方法1:
function echo_color(){
if [ $ 1 == “ green” ]; 然后
回显 -e “ [32; 40m $ 2 [0m]
elif [ $ 1 == ” red“ ]; 然后
echo -e “ [31; 40m $ 2 [0m”
fi
}

方法2:
function echo_color(){
case $ 1 in
green)
echo -e “ [32; 40m $ 2 [0m”
;;
红色)
echo -e “ [31; 40m $ 2 [0m]”

*)
echo “示例:echo_color red string”
esac
}
使用方法:echo_color green “ test”

function关键字定义一个函数,可加或不加。


3批量创建用户

#!/ bin / bash
DATE = $(date +%F_%T)
USER_FILE = user.txt
echo_color(){
如果 [ $ 1 == “ green” ]; 然后
回显 -e “ [32; 40m $ 2 [0m]
elif [ $ 1 == ” red“ ]; 然后
回显 -e “ [31; 40m $ 2 [0m”
fi
}
#如果用户文件存在并且大小大于0就备份
if [-s $ USER_FILE ]; 然后
mv $ USER_FILE $ {USER_FILE} - $ {DATE} .bak
echo_color green “$ USER_FILE 存在,重命名 $ {USER_FILE} - $ {DATE} .bak“
fi
echo -e ” User Password“ >> $ USER_FILE
echo ” ----------------“ >> $ USER_FILE
为 用户 在 用户{1..10}; 这样做
,如果 ID! $ USER &>的/ dev / null的, 则
PASS = $(回声 $ RANDOM |的md5sum |切-c 1-8)
useradd的 $ USER
回声 $ PASS | passwd --stdin $ USER &> / dev / null
echo -e “$ USER $ PASS“ >> $ USER_FILE
echo ” $ USER 用户创建成功。“
否则
echo_color红色 ” $ USER 用户已经存在!“
fi
完成

4检查双面是否安装

#!/ bin / bash
如果 rpm -q sysstat&> / dev / null; 然后
回显 “ sysstat已安装”。
否则,
回显 “未安装sysstat!”
科幻

5检查服务状态

#!/ bin / bash
PORT_C = $(ss -anu | grep -c 123)
PS_C = $(ps -ef | grep ntpd | grep -vc grep)
if [ $ PORT_C -eq 0 -o $ PS_C -eq 0] ; 然后
回显 “内容” | 邮件-s “主题” dst@example.com
fi

6检查主机存活状态

方法1:将错误IP放到并发症里面判断是否失败

#!/斌/庆典
IP_LIST = “192.168.18.1 192.168.1.1 192.168.18.2”
的 IP 在 $ IP_LIST ; 在 [ $ NUM -le 3] 时执行
NUM = 1 ; 这样做,如果 平-c 1 $ IP >的/ dev / null的; 然后回显“ $ IP Ping成功。” 中断else #echo“ $ IP Ping失败$ NUM” FAIL_COUNT [ $ NUM ] = $ IP 如果 [ $ {#FAIL_COUNT [*]} -eq 3] 使 NUM ++ fi 完成;然后回声“

$ {FAIL_COUNT [1]} Ping失败!”未
设置 FAIL_COUNT [*]
fi
完成

方法2:将错误次数放到FAIL_COUNT变量里面判断是否ping失败三次

#!/斌/庆典
IP_LIST = “192.168.18.1 192.168.1.1 192.168.18.2”
的 IP 在 $ IP_LIST ; 为 ((i = 1; i <= 3; i ++))做
FAIL_COUNT = 0 ; 如果 ping -c 1 $ IP > / dev / null,该怎么办? 然后回显“ $ IP Ping成功。” 打破别人#回声“$ IP Ping是失败$ I” 让 FAIL_COUNT ++ 网络完成,如果 [ $ FAIL_COUNT -eq 3]。 然后回显“ $ IP Ping失败!” 连接完成

方法3:利用为循环将ping通就就跳出循环继续,如果不跳出就会走到打印ping失败

#!/ bin / bash
ping_success_status(){
如果 ping -c 1 $ IP > / dev / null; 然后
回显 “ $ IP Ping成功。”
继续
科幻
}
IP_LIST = “192.168.18.1 192.168.1.1 192.168.18.2”
的 IP 在 $ IP_LIST ; 做
ping_success_status
ping_success_status
ping_success_status
回声 “ $ IP 平就是失败!”
做完了

7监控CPU,内存和硬盘利用率

1)CPU

通过vmstat工具来分析CPU统计信息。

#!/ bin / bash
DATE = $(date +%F “”%H:%M)
IP = $(ifconfig eth0 | awk -F [:] + / inet addr / {print $ 4}) #只支持CentOS6
邮件= “ example@mail.com”,
如果 ! 哪个 vmstat&> / dev / null; 然后
回显 “找不到vmstat命令,请安装procps软件包。”
退出 1
fi
US = $(vmstat | awk NR == 3 {print $ 13})
SY = $(vmstat | awk NR == 3 {print $ 14})
IDLE = $(vmstat | awk NR == 3 {print $ 15})
WAIT = $(vmstat | awk NR == 3 {print $ 16})
USE = $(($ US+ $ SY))
如果 [ $ USE -ge 50]; 然后
回显 “
日期: $ DATE
主机: $ IP
问题:CPU利用率 $ USE
” | 邮件-s “ CPU Monitor” $ MAIL
fi

2)内存

#!/ bin / bash
DATE = $(date +%F “”%H:%M)
IP = $(ifconfig eth0 | awk -F [:] + / inet addr / {print $ 4})
MAIL = “ example @ mail.com”
TOTAL = $(免费-m | AWK / MEM / {$打印2} )
USE = $(免费-m | AWK / MEM / {$打印3- $ $ 6- 7} )
FREE = $(($ TOTAL - $ USE))
#内存小于1G发送报警邮件
if [ $ FREE -lt 1024]; 然后
回显 “
日期: $ DATE
主机: $ IP
问题:总计= $ TOTAL,使用= $ USE,免费= $ FREE
“ |邮件-s ”内存监视器“ $ MAIL
fi

3)硬盘

#!/ bin / bash
DATE = $(date +%F “”%H:%M)
IP = $(ifconfig eth0 | awk -F [:] + / inet addr / {print $ 4})
MAIL = “ example @ mail.com“
TOTAL = $(fdisk -l | awk -F [:] + BEGIN {OFS =” =“} / ^ Disk / dev / {printf”%s =%sG,“,$ 2,$ 3})
PART_USE = $(DF -h | AWK BEGIN {OFS = “=”} / ^的/ dev / {打印$ 1,INT($ 5),$ 6} )
为 我 在 $ PART_USE ; 做
PART = $(echo $ i | cut -d “ =” -f1)
USE = $(echo $ i | cut -d “ =”
$ i | cut -d “ =” -f3)
如果 [ $ USE -gt 80]; 然后
回显 “
日期: $ DATE
主机: $ IP
总计: $ TOTAL
问题: $ PART = $ USE($ MOUNT)
” | 邮件-s “磁盘监视器” $ MAIL
fi
完成

8批量主机磁盘最大化监控

最初的监控端和被监控端SSH免交互登录或密钥登录。

写一个配置文件保存被监控主机SSH连接信息,文件内容格式:IP用户端口

#!/ bin / bash
HOST_INFO = host.info
for IP in $(awk / ^ [^#] / {print $ 1} $ HOST_INFO); 做
USER = $(awk -v ip = $ IP ip == $ 1 {print $ 2} $ HOST_INFO)
PORT = $(awk -v ip = $ IP ip == $ 1 {print $ 3} $ HOST_INFO)
TMP_FILE = / tmp / disk.tmp
SSH -p $ PORT $ USER @ $ IP DF -h > $ TMP_FILE
USE_RATE_LIST = $(AWK BEGIN {OFS = “=”} / ^的/ dev / {打印$ 1,INT($ 5)} $ TMP_FILE)
为 USE_RATE 在 $ USE_RATE_LIST ; 如果 [ $ USE_RATE -ge 80],则执行
PART_NAME = $ {USE_RATE%= *}
USE_RATE = $ {USE_RATE#* =}; 然后回显“警告: $ PART_NAME 分区使用情况 $ USE_RATE%!” 科幻完成完成

9检查网站可用性

1)检查URL可用

方法1:
check_url(){
HTTP_CODE = $(curl -o / dev / null --connect-timeout 3 -s -w “%{http_code}” $ 1)
如果 [ $ HTTP_CODE -ne 200]; 然后
回显 “警告: $ 1 访问失败!”
fi
}
方法2:
check_url(){
如果 !wget -T 10 --tries = 1 --spider $ 1 > / dev / null 2>&1; 复制代码 然后
#-T超时时间,-tries尝试1次,-spider爬虫模式
回声 “警告: $ 1 访问失败!”
fi
}

使用方法:check_url www.baidu.com

2)判断三次URL可用

思路与上面检查主机存活状态一样。

方法1:利用循环技巧,如果成功就跳出当前循环,否则执行到最后一行
#!/ bin / bash
check_url(){
HTTP_CODE = $(curl -o / dev / null --connect-timeout 3 -s -w 如果 [ $ HTTP_CODE -eq 200],则为“%{http_code}” $ 1); 然后继续科幻 } URL_LIST = “www.baidu.com www.agasgf.com” 的 URL 在$ URL_LIST ; do check_url $ URL check_url $ URL check_url $ URL echo “警告: $ URL 访问失败!” 做完了

方法2:错误次数保存到变量
#!/斌/庆典
URL_LIST = “www.baidu.com www.agasgf.com”
的 URL 在 $ URL_LIST ; 为 ((i = 1; i <= 3; i ++))做
FAIL_COUNT = 0 ; 如果 [ $ HTTP_CODE -ne 200],则执行 HTTP_CODE = $(curl -o / dev / null --connect-timeout 3 -s -w “%{http_code}” $ URL); 然后让 FAIL_COUNT ++ 别人休息网络完成,如果 [ $ FAIL_COUNT -eq 3]。 然后回显“警告: $ URL 访问失败!” 科幻

做完了

方法3:错误次数保存到数组
#!/斌/庆典
URL_LIST = “www.baidu.com www.agasgf.com”
的 URL 在 $ URL_LIST ; 在 [ $ NUM -le 3] 时执行
NUM = 1 ; 如果 [ $ HTTP_CODE -ne 200],则执行 HTTP_CODE = $(curl -o / dev / null --connect-timeout 3 -s -w “%{http_code}” $ URL); 然后 FAIL_COUNT [ $ NUM ] = $ IP #创建数组,以$ NUM下标,$ IP元素让 NUM ++ 别人休息网络完成,如果 [ $ {#FAIL_COUNT [*]}

-eq 3]; 然后
回显 “警告: $ URL 访问失败!”
未设置 FAIL_COUNT [*] #清空数组
网络
完成

10检查MySQL主从同步状态

#!/ bin / bash
USER = bak
PASSWD = 123456
IO_SQL_STATUS = $(mysql -u $ USER -p $ PASSWD -e show slave statusG | awk -F: / Slave _。* _ Running / {gsub(“:”,“: “); $打印0} ) #gsub去除冒号后面的空格
为 我 在 $ IO_SQL_STATUS ; DO
THREAD_STATUS_NAME = $ {I%:*}
THREAD_STATUS = $ {I#*:}
如果 [ “ $ THREAD_STATUS ” != “是” ]; 然后
回显 “错误:MySQL主从 $ THREAD_STATUS_NAME 状态为 $ THREAD_STATUS!”
连接
完成

本章写的Shell脚本示例都比较实用,在面试题中也经常出现,希望大家参考着多动手写写,不要复制粘贴就拿来跑,这样是学不会的!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
14年后,再看“京城四少”的现状,才明白娶一个好老婆有多重要

14年后,再看“京城四少”的现状,才明白娶一个好老婆有多重要

丰谭笔录
2026-01-13 07:20:11
长春居民因客厅放床被停燃气20天

长春居民因客厅放床被停燃气20天

极目新闻
2026-01-13 09:51:51
服务满意度达99.9%!海尔智家入选2025“质胜之道”典型案例

服务满意度达99.9%!海尔智家入选2025“质胜之道”典型案例

投资时间网
2026-01-13 16:50:32
合川杀猪饭刚结束,榜一大哥坐不住了,上门邀请呆呆参加公司活动

合川杀猪饭刚结束,榜一大哥坐不住了,上门邀请呆呆参加公司活动

天天热点见闻
2026-01-13 12:31:28
伊朗今日公开处决抗议者,美国和以色列究竟在干什么?

伊朗今日公开处决抗议者,美国和以色列究竟在干什么?

史政先锋
2026-01-13 14:47:23
大连8米高梦露雕像悄然被撤,商场人员:我也是今天上班才知道,集团有新的规划

大连8米高梦露雕像悄然被撤,商场人员:我也是今天上班才知道,集团有新的规划

极目新闻
2026-01-12 13:00:56
知乎750万浏览:为什么不能对认知低的人太好?

知乎750万浏览:为什么不能对认知低的人太好?

精读君
2026-01-13 10:00:11
郭有才在央视讲《道德经》,这真不是个笑话

郭有才在央视讲《道德经》,这真不是个笑话

关尔东
2026-01-12 16:28:55
29岁网红口子姐去世后续!早年黑料被扒,自曝得梅毒只是冰山一角

29岁网红口子姐去世后续!早年黑料被扒,自曝得梅毒只是冰山一角

李健政观察
2026-01-13 11:00:10
去年上海结婚登记125102对,比2024年增长38.7%,2025年上海全市初婚平均年龄29.7岁

去年上海结婚登记125102对,比2024年增长38.7%,2025年上海全市初婚平均年龄29.7岁

纵相新闻
2026-01-13 00:09:04
度日如年:三名皇家马德里球员是阿隆索下课的导火索

度日如年:三名皇家马德里球员是阿隆索下课的导火索

油泼辣不辣
2026-01-13 06:07:44
29岁网红口子姐去世,父亲病逝,自曝得梅毒,欠债太多下海惹争议

29岁网红口子姐去世,父亲病逝,自曝得梅毒,欠债太多下海惹争议

揽星河的笔记
2026-01-13 13:05:05
我国最“不靠谱”的三位专家,在央视“大放厥词”,却爆火34年

我国最“不靠谱”的三位专家,在央视“大放厥词”,却爆火34年

有范又有料
2026-01-13 09:21:31
台媒:台立法机构确认“赖清德弹劾案”议程

台媒:台立法机构确认“赖清德弹劾案”议程

环球网资讯
2026-01-13 17:23:11
国产车企警惕!特斯拉FSD即将入华,技术代差恐进一步拉大

国产车企警惕!特斯拉FSD即将入华,技术代差恐进一步拉大

燕梳楼频道
2026-01-12 21:14:25
外交部:会采取一切必要措施保护在伊朗中国公民安全

外交部:会采取一切必要措施保护在伊朗中国公民安全

财联社
2026-01-13 15:20:18
“退休人员产检可报销”被热议,本质是因为荒唐

“退休人员产检可报销”被热议,本质是因为荒唐

清书先生
2026-01-13 16:41:39
老干妈创始人“出山救子”!78岁陶华碧翻盘,一年大卖54亿元销售额重回巅峰

老干妈创始人“出山救子”!78岁陶华碧翻盘,一年大卖54亿元销售额重回巅峰

极目新闻
2026-01-13 15:22:44
湖南怀化全城喊“臭” ,当地回应:企业设备故障导致废气挥发

湖南怀化全城喊“臭” ,当地回应:企业设备故障导致废气挥发

环球网资讯
2026-01-13 14:14:08
梅德韦杰夫调侃:美国再不抓紧,格陵兰就要入俄了 捍卫格陵兰,欧盟北约还能做些啥?

梅德韦杰夫调侃:美国再不抓紧,格陵兰就要入俄了 捍卫格陵兰,欧盟北约还能做些啥?

红星新闻
2026-01-13 13:34:29
2026-01-13 18:07:00
互联网干货博主
互联网干货博主
我是专注分享互联网干货的博主
278文章数 1340关注度
往期回顾 全部

科技要闻

每年10亿美元!谷歌大模型注入Siri

头条要闻

美媒:特朗普政府对伊朗军事行动选项"远超传统空袭"

头条要闻

美媒:特朗普政府对伊朗军事行动选项"远超传统空袭"

体育要闻

CBA还能众筹换帅?

娱乐要闻

周杰伦以球员身份参加澳网,C位海报公开

财经要闻

"天量存款"将到期 资金会否搬入股市?

汽车要闻

限时9.99万元起 2026款启辰大V DD-i虎鲸上市

态度原创

家居
本地
房产
数码
公开课

家居要闻

现代简逸 寻找生活的光

本地新闻

云游内蒙|到巴彦淖尔去,赴一场塞上江南的邀约

房产要闻

又一新校开建!海口这一片区,迎来教育重磅升级!

数码要闻

希捷正式推出32TB CMR机械硬盘三剑客,覆盖企业、监控、NAS端

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版