专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
ImportNew  ·  Java 之父怒斥:AI ... ·  2 天前  
芋道源码  ·  分享一次 ShardingJDBC ... ·  2 天前  
芋道源码  ·  疯传Java界,堪称最强! ·  2 天前  
51好读  ›  专栏  ›  ImportNew

18 个一线工作中常用 Shell 脚本

ImportNew  · 公众号  · Java  · 2023-08-24 21:59

正文

请到「今天看啥」查看全文


)) [ $MIN -lt $INT ] && MIN= $INT [ $MAX -gt $INT ] && MAX= $INT let COUNT++ done echo "SUM: $SUM " echo "MIN: $MIN " echo "MAX: $MAX "


用户猜数字


#!/bin/bash  # 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,# 猜小了或猜大了,直至用户猜对脚本结束。# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数# 使用取余算法将随机数变为 1‐100 的随机数num=$[RANDOM%100+1]echo "$num"# 使用 read 提示用户猜数字# 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),# ‐lt(小于),‐le(小于等于)
while :do read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai if [ $cai -eq $num ] then echo "恭喜,猜对了" exit elif [ $cai -gt $num ] then echo "Oops,猜大了" else echo "Oops,猜小了" fidone


7、监测 Nginx 访问日志 502 情况,并做相应动作


假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。


#场景:#1.访问日志文件的路径:/data/log/access.log#2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务#3.重启命令为:/etc/init.d/php-fpm restart#!/bin/bash############################################################监测Nginx访问日志502情况,并做相应动作###########################################################log=/data/log/access.logN=30 #设定阈值while :do    #查看访问日志的最新300条,并统计502的次数    err=`tail -n 300 $log |grep -c '502" '`    if [ $err -ge $N ]    then        /etc/init.d/php-fpm restart 2> /dev/null        #设定60s延迟防止脚本bug导致无限重启php-fpm服务        sleep 60    fi    sleep 10done


8、将结果分别赋值给变量


应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。


方法1:


for i in $(echo "4 5 6"); do    eval a$i=$idoneecho $a4 $a5 $a6

方法2:将位置参数192.168.1.1{1,2}拆分为到每个变量


num=0for i in $(eval echo $*);do   #eval将{1,2}分解为1 2    let num+=1    eval node${num}="$i"doneecho $node1 $node2 $node3# bash a.sh 192.168.1.1{1,2}192.168.1.11 192.168.1.12

方法3:

arr=(4 5 6)INDEX1=$(echo ${arr[0]})INDEX2=$(echo ${arr[1]})INDEX3=$(echo ${arr[2]})


9、批量修改文件名


示例:


# touch article_{1..3}.html  # lsarticle_1.html  article_2.html  article_3.html

目的:把 article 改为 bbs  


方法1:


for file in $(ls *html); do      mv $file bbs_${file#*_}      # mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')      # mv $file $(echo $file |echo bbs_$(cut -d_ -f2)


方法2:


for file in $(find . -maxdepth 1 -name "*html"); do       mv $file bbs_${file#*_}done


方法3:


# rename article bbs *.html
 
把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母  
  
1)准备测试文件,文件名为2.txt  

第1行1234567不包含字母  第2行56789BBBBBB  第3行67890CCCCCCCC  第4行78asdfDDDDDDDDD  第5行123456EEEEEEEE  第6行1234567ASDF  第7行56789ASDF  第8行67890ASDF  第9行78asdfADSF  第10行123456AAAA  第11行67890ASDF  第12行78asdfADSF  第13行123456AAAA

2)脚本如下:


#!/bin/bash  ###############################################################  把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母  ##############################################################  sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d  sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g  sed -n '11,$'p 2.txt  #最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项

10、统计当前目录中以 .html 结尾的文件总大

方法1:


# find . -name "*.html" -exec du -k {} \; |awk '{sum+=$1}END{print sum}'  

方法2:  

for






请到「今天看啥」查看全文