设为首页 加入收藏

TOP

18 个一线工作的常用 Shell 脚本,建议收藏!(二)
2023-09-09 10:25:59 】 浏览:107
Tags:常用 Shell 脚本
以内的数字,统计和、最小和最大
#!/bin/bash  
COUNT=1  
SUM=0  
MIN=0  
MAX=100  
while [ $COUNT -le 5 ]; do  
    read -p "请输入1-10个整数:" INT      
    if [[ ! $INT =~ ^[0-9]+$ ]]; then  
        echo "输入必须是整数!"  
        exit 1  
    elif [[ $INT -gt 100 ]]; then  
        echo "输入必须是100以内!"  
        exit 1  
    fi  
    SUM=$(($SUM+$INT))  
    [ $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,猜小了"       
    fi  
  done  

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.log  
N=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 10  
 done  

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

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

方法1:

for i in $(echo "4 5 6"); do  
   eva l a$i=$idone  
echo $a4 $a5 $a6  

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

num=0  
for i in $(eva l echo $*);do   #eva l将{1,2}分解为1 2  
   let num+=1  
   eva l node${num}="$i"  
done  
echo $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:  
```bash  
for size in $(ls -l *.html |awk '{print $5}'); do  
    sum=$(($sum+$size))  
done  
e
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇java与es8实战之六:用JSON创建请.. 下一篇钉钉消息已读、未读咋实现的嘞?

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目