例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