• 新浪系统工程师笔试--shell


    1.
    test01   test02
    1 200    1 100
    2 500    2 300
    3 200    3 50
    4 100    4 150
    输出
    200 100 100
    500 300 200
    300 50  150
    100 150 -50
    awk 减法数组
    awk ‘ NR == FNR { a[NR]=$2 } NR != FNR { print a[FNR], $2,(a[FNR]-$2)} ' /root/test*
     
    2.
    123abc456
    456def123
    567abc789
    789def567
    要求输出:
    456ABC123
    123DEF456
    789ABC567
    567DEF789
    sed -r  's/([1-9]{3})([a-f]{3})([1-9]{3})/321/;y/abcdef/ABCDEF/'
     
    3. 编写shell程序,实现自动删除50个账号的功能。账号名为stud1至stud50。
    for((i=1;i<51;i++))
    do
    userdel -r stud$i
    done
     
    4. 某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
     (1)在下午4 :50删除/abc目录下的全部子目录和全部文件;
     (2)从早8:00~下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
     (3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz;
    crontab -e
          50 16 * * * rm -rf /abc/*
          * 8-18/1 * * * awk '{print $1 > "/backup/bak01.txt"}' /xyz/x1
          50 17 * * 1 tar -czf backup.tar.gz /data
     
    5. gameser这个服务启动命令为./gameser服务,请写一个脚本,当服务宕掉,脚本自动拉起gameser服务。
    #!/bin/bash
    while true;do
            result=`ps aux | grep gameser | wc -l`
            if [ $result -lt 2 ];then
     ./gamester
    fi
            sleep 5
    done
     
    6. linux crontab;请在3月23号21点18分的时候,重启服务器
    crontab -e
         18 21 23 3 * init 6
     
    7. 你想每天23:00运行xxxx.sh脚本。并自动进行日志分析。第2天上班的时候看到分析结果 给出你的部属方案
    0 23 * * * sh ****.sh;err=$?;logger -p cron.err $err
     
    8. 运行脚本输入两个数得到如下结果:
      #sh xxx.sh 2 3
           **
           ***
           *****
    !/bin/bash
    For((i=1;i<=$1;i++));do
    echo –n *
    done
    echo
    For((i=1;i<=$2;i++));do
    echo –n *
    done
    echo
    For((i=1;i<=$[$1+$2];i++));do
    echo –n *
    done
    echo
     
    9. 查找文件后缀是log的 三天前的文件删除
    find / -name "*.log" -and -mtime +3 -exec rm -rf {} ;
     
    10. 写一个脚本将目录下大于100kb的文件移动到/tmp下
    find ./ -size +100k -exec mv {}  /tmp ;
     
    11. 日志如下统计访问IP最多的前10个
    192.168.0.6 - - [25/Nov/2010:13:55:10 +0800] "GET /cacti/images/auth_login.gif HTTP/1.1" 200 21265 "http://192.168.0.104/cacti/graph_view.php?action=tree&tree_id=2&leaf_id=8&page=3" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)"
     192.168.0.6 - - [25/Nov/2010:13:55:14 +0800] "GET /favicon.ico HTTP/1.1" 404 287 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)
     
    cut  -d " "   -f1   /etc/httpd/log/access_log  |  sort  |  uniq  -c  |  sort  -nr | head -10
     
    12. 过滤出当前目录下所有以字母(不区分大小写)开头的文件
    ls | grep -P -i "^[a-z]"
     
    13. 文件A.txt内容为"12:34:68",只输出A.txt中的"34"
    awk  -F ":" '{print $2}' A.txt
     
    14. 用sed命令实现直接将文件B.TXT中的所有123替换成345
    sed -i 's/123/456/g' B.TXT
     
    15. 用sed修改文件mailbox.txt的20行的zhango为wang
    sed -i '20s/zhango/wang/' mailbox.txt
     
     
    16. 正则表达式,IP地址的匹配,写一下
    ([0-9]{1,3}.){1,3}([0-9]){1,3}
     
    17. 写出命令。统计日志文件weblog.log中 今天14:00~15:00的记录条数(时间格式:2011-01-01—15:30:11)
    Echo weblog | grep –c “2011-01-01-14”
     
    18. 将当前目录所有文件扩展名改为log
    for file in `ls ./ | grep -P "(.*)(..*)"`
    do 
    echo $file | mv $file `sed -r 's#(.*)(..*)#1.log#'`
    done
     
    19. 用一行命令实现:查找当前目录下(含子目录),文件内容中含有sina且文件名以".config"结尾的文件
    grep -lr "sina" ./ | grep -P "(.*)(.config$)"
     
    20. 用shell查询以“.”结尾的文件,并加上后缀“.ts”
    find ./ -name "*." -exec mv {} {}ts ;
     
    21. 假定某个web服务器访问log其中一行如下:
    61.159.245.95 - - [30/Apr/2003:01:04:20 +0800] "GET / HTTP/1.1" 200 151 "http://www.baidu.com" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT
    6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3; 360SE)"
     该LOG文件超过10万行,如果列出最后的10万行中请求最多前十位IP,显示如下的结果:
     119 211.101.169.200
     103 211.101.169.206
     50 61.149.38.249
     11 202.106.138.194
     请用一行命令显示出上面的结果
     awk '{ip[$1]++}END{for(var in ip)print ip[var],var |"sort -nr|head -n10"}' log
     
    22. linux下ifconfig命令显示结果如下:
     eth0      Link encap:Ethernet  HWaddr 00:0C:29:AA:E6:44
               inet addr:192.168.213.128  Bcast:192.168.213.255  Mask:255.255.255.0
               inet6 addr: fe80::20c:29ff:feaa:e644/64 Scope:Link
               UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
               RX packets:39962 errors:0 dropped:0 overruns:0 frame:0
               TX packets:27038 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:1000
               RX bytes:35108954 (33.4 MiB)  TX bytes:6573610 (6.2 MiB)
               Base address:0x2000 Memory:c9020000-c9040000
     
    lo        Link encap:Local Loopback
               inet addr:127.0.0.1  Mask:255.0.0.0
               inet6 addr: ::1/128 Scope:Host
               UP LOOPBACK RUNNING  MTU:16436  Metric:1
               RX packets:1833 errors:0 dropped:0 overruns:0 frame:0
               TX packets:1833 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:0
               RX bytes:4840659 (4.6 MiB)  TX bytes:4840659 (4.6 MiB)
     执行如下命令
     /sbin/ifconfig eth0|grep 'inet '|sed 's/^.*addr://g'|sed 's/ Bcast.*$//g'
     请写出命令的输出结果
    192.168.213.128
     
    23. 多线程/多进程 程序同时访问相同的资源(例如:同时向一个文件里写数据)需要注意些什么?
    至少注意文件锁,读锁与写锁
     
    24. 写脚本实现,可以用shell,perl等。把文件B中有的,但是文件A中没有的所有行,保存为文件C,并统计C的行数
    diff B A | grep "<" | sed 's/< //' > C
     
    25. 脚本实现把/tmp/目录下所有创建超过7天的文件删除
    find /tmp -mtime +7 -exec rm -rf {} ;
     
    26. 把1 2 3 4 5 6按如下格式输出
     1
     2
     3
     4
     5
     6
     如何实现
    echo 1 2 3 4 5 6 | sed "s# # #g"
     
    27. 设计一个shell程序,在2012年12月23日凌晨3点备份并压缩前一天/svn目录的所有内容,存放在/root/bak目录里,且文件名为如下形式svn.2008.05.06.tar.gz,试写脚本。
    at 201212230300
         at> find /svn -mtime +1 -and -mtime -2 -exec cp -r {} /root/bak ;
         at> tar -czf svn.2008.05.06.tar.gz /root/bak
     
    亚瑟王环
    有1到100的数字序列。有计数器每数到12,就将计数器指向的数字在亚瑟环中剔除,问该序列中最后剩下的数字是多少?
     
    #/bin/bash
    for   i   in   {1..100};do
    huan[$i]=$i
    done      #先初始化一个数组,其实用变量也行,个人喜好,用awk也行,但一篇内容一个shell有点不合适。
    t=0  #定义一个计数器
    sum=0
    while true;do   #定义一个无限循环,因为确实不知道要数多少次。
        for((i=1;i<101;i++));do
            if [ ${huan[$i]} -gt 0 ];then  #不等于零就把计数器加1
                let t++
            fi
            if [ $t -eq 12 ];then  #数到12就将数组中的数清零,同时计数器清零
                huan[$i]=0
                t=0
            fi
        done
        for((i=1;i<101;i++));do  #遍历数组,如果数组中只有一个数不为零就跳出循环
            if [ ${huan[$i]} -gt 0 ];then
                let sum++
                sum[1]=${huan[$i]}
            fi
        done
        if [ $sum -eq 1 ];then
            break
        else 
            sum=0
        fi
    done

    echo ${sum[1]}

    原文转自:http://blog.csdn.net/lwj103862095/article/details/11902213

  • 相关阅读:
    js循环添加事件
    [Swift]LeetCode1085. 最小元素各数位之和 | Sum of Digits in the Minimum Number
    [Swift]LeetCode1089. 复写零 | Duplicate Zeros
    [Swift]冒泡排序 | Bubble sort
    [Algorithm]巧用多项式系数与进制的联系
    [Swift]LeetCode1081. 不同字符的最小子序列 | Smallest Subsequence of Distinct Characters
    [Swift]LeetCode1080. 根到叶路径上的不足节点 | Insufficient Nodes in Root to Leaf Paths
    [Swift]LeetCode1079. 活字印刷 | Letter Tile Possibilities
    [Swift]LeetCode1078. Bigram 分词 | Occurrences After Bigram
    [Swift]快速反向平方根 | Fast inverse square root
  • 原文地址:https://www.cnblogs.com/riskyer/p/3333840.html
Copyright © 2020-2023  润新知