shell习题-26

题目要求

写一个脚本,依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么,如:

Hello, root,your UID is 0.

参考答案

#!/bin/bash
#这个脚本用来问候用户
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-11

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

题目要求

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

<configuration>
    <artifactItems>
        <artifactItem>
       <groupId>zzz</groupId>
       <artifactId>aaa</artifactId>
    </artifactItem>
    <artifactItem>
       <groupId>xxx</groupId>
       <artifactId>yyy</artifactId>
    </artifactItem>
    <!-- </artifactItem><groupId>some groupId</groupId>
       <version>1.0.1.2.333.555</version> </artifactItem>-->
    </artifactItems>
</configuration>

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

参考答案

#!/bin/bash
#这个脚本用来格式化xml文件
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-11

sed ‘/<!--.*-->/d‘ test.xml > test2.xml
egrep -n ‘<!--|\-\->‘ test2.xml |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`
    y=`sed -n "$j"p /tmp/line_number1.txt`
    sed -i "$x,$y"d test2.xml
done

grep -n ‘artifactItem>‘ test2.xml |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 test2.xml|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
}

n3=$[$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]
    get_value $nu3 $nu4
done

题目要求

请撰写一个shell函数,函数名为 f_judge,实现以下功能

  1. 当/home/log目录存在时将/home目录下所有tmp开头的文件或目录移到/home/log目录。
  2. 当/home/log目录不存在时,创建该目录,然后退出。

参考答案

#!/bin/bash
#这个脚本用来写一个小函数
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-11

f_judge()
{
    if [ -d /home/log ]
    then
    #find /home -name "tmp*" |xargs -i mv {} /home/log/
    find /home -name "tmp*" -exec mv {} /home/log/ \;
    else
    mkdir /home/log
    exit
    fi
}

f_judge

题目要求

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,xxxxxx
……

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

参考答案

#!/bin/bash
#这个脚本用来批量杀tomcat进程
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-12

cat > kill_tomcat.expect <<EOF
#!/usr/bin/expect
set passwd [lindex \$argv 0]
set host [lindex \$argv 1]
spawn ssh [email protected]\$host

expect {
    "yes/no" { send "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-pwd.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

题目要求

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

参考答案

#!/bin/bash
#这个脚本用来查找老日志打包
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-12

cd /data/log
find . -type f -name "*.log" -mtime +3 > /tmp/old_log
d=`date +%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

题目要求

有如下文本,其中前5行内容为

1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123

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

[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123

参考答案

#!/bin/bash
#这个脚本用来处理文本
#作者:猿课-阿铭 www.apelearn.com
#日期:2018-12-12

for w in `awk -F ‘:‘ ‘{print $1}‘ 3.txt |sort |uniq`
do
    echo "[$w]"
    awk -v w2=$w -F ‘:‘ ‘$1==w2 {print $2}‘ 3.txt
done

原文地址:https://blog.51cto.com/865516915/2436492

时间: 2024-11-10 16:50:26

shell习题-26的相关文章

linux shell习题训练

shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M

习题2-6 排列--------《竞赛算法入门指导》

习题2-6 排列(permutation)用1,2,3,-,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3.按照"abc def ghi"的格式输出所有解,每行一个解.提示:不必太动脑筋. #include <iostream> using namespace std; int main(void){ int s,m,n; int a, b, c, d,e, f, g, h, i; for(s=100;s<1000

浙大版《C语言程序设计(第3版)》题目集 习题2-6 求阶乘序列前N项和 (15 分)

习题2-6 求阶乘序列前N项和 (15 分) 本题要求编写程序,计算序列 1!+2!+3!+? 的前N项之和. 输入格式: 输入在一行中给出一个不超过12的正整数N. 输出格式: 在一行中输出整数结果. 输入样例: 5 输出样例: 153 思路:利用函数阶乘累加. 代码如下: #include <stdio.h> long factorial(long n); int main() { long n; scanf("%ld",&n); printf("%l

shell习题第26题:监控mysql服务

[题目要求] 假设mysql密码是123456. 写脚本监控mysql服务是否正常,比如是否可以执行show processlist,并检测一下当前的mysql服务是主还是从.如果是从,请判断他的主从服务是否正常.如果是主,则不需要做什么 [核心要点] mysql -uroot -p123456 -e "show processlist" show slave status [脚本] #!/bin/bash mysql="/usr/local/mysql/bin/mysql

《笨办法学python第三版》习题26,原错误代码及正确代码

#import ex25 1 def break_words(stuff): 2 """This function will break up words for us.""" 3 words = stuff.split(' ') 4 return words 5 6 def sort_words(words): 7 """Sorts the words.""" 8 return sor

算法竞赛入门经典习题2-6 排列(permutation)

暴力解法: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int compare(const void *a, const void *b); 5 6 int main(int argc, char **argv){ 7 int i,j,k; 8 int arr[9]; 9 for(i=100;i<333;i++){ 10 for(j=200;j<666;j++){ 11 for(k=300;k<1000;k++){

[华为机试练习题]26.铁路栈问题

题目 描述: 题目标题:铁路栈问题 铁路的调度站如下: 火车编号为:1~9,且不重复. 如:编号分别为"1"."2"."3"."4"."5"的5个火车顺序进站,那么进站序列为"12345",全部进站后再顺序出站,则出站序列为"54321",如果先进1,2,然后2出站,然后1出站,然后再3进站.出站,4进站.出站,5进站.出站,那么出站序列就为21345. 详细描述:

shell学习:几道常见shell习题

1. 编写shell脚本,计算1-100的和: 2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止: 3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下: 4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组: 5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列

shell习题-批量同步代码

需求背景是: 一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具.有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上.但是其他2台服务器也需要做相同变更. 写一个shell脚本,把A服务器上的变更代码同步到B和C上. 其中,你需要考虑到不需要同步的目录(假如有tmp.upload.logs.caches) #!/bin/bash echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B,C机器上&quo