shell训练计划30天之第二十六天

例73 问候用户

要求:写一个脚本,依次向/etc/passwd中每个用户我弄好,并且说出对方的ID是什么,如:hello,root,your UID is 0.

要点:对/etc/passwd每一行做遍历,截取第一段用户名和第三段uid,然后格式化输出即可

 

 

#!/bin/bash

cat /etc/passwd | while read line

do

username=`echo $line | awk -F ':' '{print $1}'`

uid=`echo $line|awk -F ':' '{print $3}'`

echo "Hello ,$username,your uid is $uid."

done

 

 

 

例74 格式化输出 xml

要求:linux系统/home目录下有一个文件test.xml,内容如下:

<configuration>

<artifactltems>

<artifactltem>

<groupld>zzz</groupld>

<artifactld>aaa</artifactld>

</artifactltem>

<artifactltem>

<groupld>xxx</groupld>

<artifactld>yyy</artifactld>

</artifactltem>

<!-- </artifactltem><groupd>some groupld</groupld>

<version>1.0.1.2.333.555<./version></artifactltem>__>

</artifactltems>

</configuration>

写出shell脚本删除文件中的注释部分内容,获取文件中所有artifactltem的内容,并用如下格式逐行输出

artifactltem:groupld:artifactld:aaa

 

 

#!/bin/bash

sed '/<!--.*-->/d' 74.txt > 742.txt

egrep -n '<!--|\-\->' 74.txt|awk -F ':' '{print $1}' > /tmp/line_number1.txt

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

n1=$[$n/2]`

for i in `seq 1 $n1`

do

j=$[$i*2]

k=$[$j-1]

x=`sed -n "$k"p /tmp/line_number1.txt`

x=`sed -n "$j"p /tmp/line_number1.txt`

sed -i "$x,$y"d 742.txt

done

grep -n 'artifactItem>' 742.txt | awk '{print $1}' |sed 's/://' > /tmp/line_number2.txt

n2=`wc -l /tmp/line_number2.txt|awk '{print $1}'`

 

get_value(){

sed -n "$1,$2"p 742.txt|awk -F '<' '{print $2}'|awk -F '>' '{print $1,$2}' > /tmp/value.txt

cat /tmp/value.txt|while read line

do

x=`echo $line|awk '{print $1}'`

y=`echo $line|awk '{print $2}'`

echo artifactItem:$x:$y

done

}

 

n2=$[$n2/2]

for j in `seq 1 $n3`

do

m1=$[$j*2-1]

m2=$[$j*2]

nu1=`sed -n "$m1"p /tmp/line_number2.txt`

nu2=`sed -n "$m2"p /tmp/line_number2.txt`

nu3=$[$nu1+1]

nu4=$[$nu2-1]

done

 

 

例75 小函数

 

要求:写一个shell函数,函数名为 f_judge,实现以下功能

1.当/home/log目录存在时将/home目录下所有tmp开头的文件或目录移到/home/log目录

2.当/home/log目录不存在时,创建该目录,然后退出

要点:

1.[ -d /home/log] 判断目录是否存在

2.查找tmp开头的文件或目录命令是find /home -name "tmp*"

 

例76 批量杀进程

要求:linux系统中,目录/root/下游一个文件ip-pwd.ini,内容如下

10.111.11.1,root,xyxyxy

10.111.11.2,root,xzxzxz

10.111.11.3,root,123456

10.111.11.4,root,xxxxx

文件中每一行的格式都为linux服务器的IP,root用户名,root密码,请用一个shell批量将这些服务器中所有tomcat进程KILL掉

要点:expect脚本

 

[root@zabbix-server ~]# vim 76.sh

 

#!/bin/bash

cat > kill_comcat.expect <<EOF

#!/usr/bin/expect

set passwd [lindex \$argv 0]'

set host [ linedx \$argv 1]

spawn ssh root@host

 

expect {

"yes/no" { sed "yes\r"; exp_continue }

"password: {send "$passwd\r"}"

}

 

expect "]*"

send "killall java\r"

expect "]*"

send "exit\r"

EOF

 

chmod a+x kill_tomcat.expect

 

cat ip=pw.ini|while read line

do

ip=`echo $line | awk -F ',' '{print $1}'`

pw=`echo $line | awk -F ',' '{print $3}'`

./kill_tomcat.expect $pw $ip

done

 

 

例77 查找老日志打包

要求:写一个脚本查找/data/log目录下,创建时间是3天前,后缀是*.log的文件,打包后发送至192.168.1.2服务上的/data/log下,并删除原始.log文件,仅保留打包后的文件。

要点:find ./ -mtime +3

 

 

#!/bin/bash

cd /data/log

find . -type f -name "*.log" -mtime +3 > /tmp/old_log

d=`data +%F`

tar czf $d.tar.gz `cat /tmp/old_log|xargs`

rsync -a $d.tar.gz 192.168.1.2:/data/log/

cat /tmp/old_log|xargs rm

 

 

例78 处理文本

要求:有如下文本,其中前5行为

111111111:13443253456

22222222:12312312412

111111111:12341231231

33333333:11123123123

22222222:12312312312

用shell脚本处理后按下面格式输出

[111111111]

13443253456

12341231231

[22222222]

12312312412

12312312312

[33333333]

11123123123

要点:第一段排序,然后遍历

 

 

#!/bin/bash

for w in `awf -F ':' '{print $1}' 3.txt | sort |uniq`

do

echo "[$w]"

awk -v w2=$w -F ':' '$1==w2 {print $2}' 3.txt

done

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值