首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于网传的shell脚本,进行简单优化

基于网传的shell脚本,进行简单优化

原创
作者头像
用户8639654
修改于 2021-08-12 06:26:12
修改于 2021-08-12 06:26:12
5070
举报
文章被收录于专栏:云计算运维云计算运维

第一题,文本格式化:

请把下面的字符串:

zhangsan

y97JbzPru

lisi

5JhvCls6q

xiaowang

Nnr8qt2Ma

laoma

iqMtvC02y

zhaosi

9fxrb4sJD

改为如下:

zhangsan:y97JbzPru

lisi:5JhvCls6q

xiaowang:Nnr8qt2Ma

laoma:iqMtvC02y

zhaosi:9fxrb4sJD

原参考答案:

#!/bin/bash

#这个脚本用来格式化文本

#作者:****

#日期:2018-12-19

n=`wc -l test3.txt|awk '{print $1}'`

n2=$[$n/2]

for i in `seq 1 $n2`

do

i2=$[$i*2]

j=$[$i2-1]

l1=`sed -n "$i2"p test3.txt`

l2=`sed -n "$j"p test3.txt`

echo $l2:$l1

done

优化后:

[root@localhost ~]# sed 'N;s/\n/:/' test

zhangsan:y97JbzPru

lisi:5JhvCls6q

xiaowang:Nnr8qt2Ma

laoma:iqMtvC02y

zhaosi:9fxrb4sJD

第二题,批量修改文件名:

至少用两种方法,批量把当前目录下面所有文件名后缀为.bak的后缀去掉,比如1.txt.bak去掉后为1.txt

原参考答案:

#!/bin/bash

#这个脚本用来去掉文件名后缀

#作者:***

#日期:2018-12-14

for f in `ls -d ./*.bak `

do

# mv $f `echo $f|sed 's/.bak$//'`

f1=`echo $f|awk -F '.bak$' '{print $1}' `

mv $f $f1

done

优化后:

[root@localhost ~]# ll

总用量 0

-rw-r--r-- 1 root root 0 6月 26 11:29 1.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 2.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 3.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 4.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 5.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 6.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 7.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 8.txt.bak

-rw-r--r-- 1 root root 0 6月 26 11:29 9.txt.bak

[root@localhost ~]# rename .txt.bak .txt *

[root@localhost ~]# ll

总用量 0

-rw-r--r-- 1 root root 0 6月 26 11:29 1.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 2.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 3.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 4.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 5.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 6.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 7.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 8.txt

-rw-r--r-- 1 root root 0 6月 26 11:29 9.txt

第三题,打印数组:

写一个脚本让用户输入多个城市的名字(可以是中文),要求不少于5个,然后把这些城市存到一个数组里,最后用for循环把它们打印出来。

原参考答案:

#!/bin/bash

#这个脚本用来打印城市名字

#作者:***

#日期:2018-12-12

read -p "输入不少于5个城市的名字,用空格分隔开。" name

n=`echo $name|awk '{print NF}'`

if [ $n -lt 5 ]

then

echo "请输入至少5个城市的名字."

exit

fi

city=($name)

for i in `seq 0 $[${#city[@]}-1]`

do

echo ${city[$i]}

done

优化后:

#!/bin/bash

read -p "输入不少于5个城市的名字,用空格分隔开: " -a name

n=`echo $name|awk '{print NF}'`

if [ `echo ${#name[@]}` -lt 5 ]

then

echo "请输入至少5个城市的名字."

exit

fi

for i in `seq 0 $[${#name[@]}-1]`

do

echo ${name[$i]}

done

第四题,判断某网站是否宕机:

写一个shell脚本,通过curl -I 返回的状态码来判定所访问的网站是否正常。 比如,当状态码为200时,才算正常。

原参考答案:

#!/bin/bash

#这个脚本用来判断一个网址是否正常

#作者:*****

#日期:2018-11-01

url="http://www.jd.com"

mail_user=3067986**@qq.com

code=`curl -I $url 2>/tmp/curl.err|head -1|awk '{print $2}'`

if [ -z "$code" ]

then

python mail.py $mail_user "$url访问异常" "`cat /tmp/curl.err`"

exit

elif [ $code != "200" ]

then

curl -I $url &> /tmp/curl.log

python mail.py $mail_user "$url访问异常 状态码$code" "`/tmp/curl.log`"

fi

优化后:

#!/bin/bash

url="http://www.jd.com"

code=`curl -ILs $url |awk '/HTTP/{print $2}'| grep -w "200"`

if [ $? -ne 0 ];then

echo "站点异常!"

#如果想发邮件通知:

#echo "站点:$url 异常,请检查!" | mailx -s "warning" username@163.com

fi

第五题,检查某网站在线的主机:

写一个shell脚本,把192.168.75.0/24网段在线的ip列出来。

原参考答案:

#!/bin/bash

for i in `seq 1 254`

do

if ping -c 2 -W 2 192.168.75.$i >/dev/null 2>/dev/null

then

echo "192.168.75.$i 是通的."

else

echo "192.168.75.$i 不通."

fi

done

优化后:

fping -ag 192.168.75.0/24 2>/dev/null

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档