zoukankan      html  css  js  c++  java
  • 【面试题目】经典shell面试题整理

    转自http://blog.csdn.net/ssjhust123/article/details/7814302

    一、取出/etc/passwd文件中shell出现的次数

    问题:下面是一个/etc/passwd文件的部分内容。题目要求取出shell并统计次数,shell是指后面的/bin/bash,/sbin/nologin等,如下面/bin/bash出现12次,/sbin/nologin出现3次。

    [plain] view plaincopy
    1. hyn:x:525:500::/home/hyn:/bin/bash  
    2. ljlxx:x:526:500::/home/ljlxx:/bin/bash  
    3. lzj:x:527:500::/home/lzj:/bin/bash  
    4. wfly:x:528:500::/home/wfly:/bin/bash  
    5. squid:x:23:23::/var/spool/squid:/sbin/nologin  
    6. wyj:x:529:500::/home/wyj:/bin/bash  
    7. qemu:x:107:107:qemu user:/:/sbin/nologin  
    8. radvd:x:75:75:radvd user:/:/sbin/nologin  
    9. dungbee:x:530:500::/home/dungbee:/bin/bash  
    10. mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash  
    11. scidb:x:531:531::/home/scidb:/bin/bash  
    12. postgres:x:532:532::/home/postgres:/bin/bash  
    13. crane:x:533:533::/home/crane:/bin/bash  
    14. test:x:534:534::/home/test:/bin/bash  
    15. hguser:x:535:535::/home/hguser:/bin/bash  

    参考答案:
    1. cat /etc/passwd|awk -F: '{print $7}'|sort|uniq -c  
    解析:
    使用awk根据冒号分割内容,打印输出分割后的第7列,也就是shell所在列。然后调用sort命令排序并使用uniq -c统计每个shell出现的次数。
     

    二、文件整理

    问题:
    employee文件中记录了工号和姓名
    [plain] view plaincopy
    1. employee.txt:  
    2. 100 Jason Smith   
    3. 200 John Doe   
    4. 300 Sanjay Gupta   
    5. 400 Ashok Sharma   
    bonus文件中记录工号和工资
    [plain] view plaincopy
    1. bonus.txt:  
    2. 100 $5,000   
    3. 200 $500   
    4. 300 $3,000   
    5. 400 $1,250   
    要求把两个文件合并并输出如下
    处理结果:

    [plain] view plaincopy
    1. 400 ashok sharma $1,250  
    2. 100 jason smith  $5,000  
    3. 200 john doe  $500  
    4. 300 sanjay gupta  $3,000  
    参考答案:
    [plain] view plaincopy
    1. paste employee.txt bonus.txt | awk '{print $1,$2,$3,$5}'|tr '[:upper:]' '[:lower:]'|sort -k 2  
    解析:
    这里用到好几个命令,包括paste,awk,tr以及sort。paste命令用于合并多个文件的同行数据,如上面两个文件employee和bonus调用paste后合并成
    [plain] view plaincopy
    1. 100 Jason Smith     100 $5,000   
    2. 200 John Doe    200 $500   
    3. 300 Sanjay Gupta    300 $3,000   
    4. 400 Ashok Sharma    400 $1,250   
    paste命令可以使用-d指定合并时加入的符号。比如paste -d : employee bonus则结果变成类似100 Jason Smith :100 $5,000 等。默认合并符号为tab符号,更多paste命令请参照http://snailwarrior.blog.51cto.com/680306/144462/
    awk用于提取除了tab符号的其余4列。
    tr命令用于将字符串中所有大写字符转换为小写字符。更多选项参见http://www.huanxiangwu.com/238/linux-tr%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3
    sort命令对字符排序。sort -k 2表示按文件第2个域排序,这里第二个域为姓名,所以是按姓名升序排序。如果要降序排列,则要用sort -k 2r。更多sort命令参见http://www.360doc.com/content/10/0925/15/1107705_56263541.shtml
     

    三、打印本机交换分区大小

    问题:打印本机交换分区大小,输出如下
    1. Swap:1024M  
    参考答案:
    1. top -n 1|grep Swap|sed 's/k.*//'|awk '{print $1,$2/1000"M"}'  
    解析:
    top 命令显示系统资源占用情况,-n 1表示只调用1次。
    grep Swap选取Swap所在行。grep命令执行后结果可能如下:
    1. Swap: 16779884k total,        0k used, 16779884k free,  3268200k cached  
    sed命令用于字符串的一些正则匹配,这里使用了替换参数,将第1个k以及后面的字符替换成了空白。这样,sed执行后,结果为:
    1. Swap: 16779884  
    awk命令输出内容,对第二个参数除以1000.
     

    四、用户清理

    问题:清除本机除了当前登陆用户以外的所有用户。
    参考答案:

    1. kill $(who -u|grep -v `whoami`|awk '{print $6}'|sort -u)  
    解析:
    who -u显示所有当前用户。grep -v选取当前登录用户以外的所有用户。awk打印用户进程ID。sort -u会删除相同的行。最后用kill命令终止。

    五、百度脚本面试题

    1)写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
    参考答案1:
    [plain] view plaincopy
    1. #!/bin/sh  
    2. for filename in `find /tmp -type f -name "abc*"|head -n 100`  
    3. do  
    4. sed -n '1p' $filename>>new  
    5. done  
    解析:第一,用到了find命令,其中-type f表示选取普通文件,-name用于设定文件名;第二,head -n 100命令用于取出前100项。第三,sed -n ’1p’用于取出文件的第一行内容。第四,>>new表示追加到文件new中。
    参考答案2:
    [plain] view plaincopy
    1. find /tmp -type f -name “abc*” | head -n 100 | xargs head -q -n 1 >> new  

    2)写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。 

    参考答案:
    [plain] view plaincopy
    1. grep -vxFf a b | tee c | wc -l  
    解析:grep选取-v表示不选择匹配的行,-F表示匹配的模式按行分割,-f a表示匹配模式来自文件a,最后表示目标文件b。即grep命令从b中选取a中不存在的行。
                tee c命令创建文件c,wc -l命令统计行数。
  • 相关阅读:
    Longest Palindromic Substring
    PayPal MLSE job description
    Continuous Median
    Remove Duplicates From Linked List
    Valid IP Address
    Longest substring without duplication
    Largest range
    Subarray sort
    Multi String Search
    Suffix Trie Construction
  • 原文地址:https://www.cnblogs.com/dracohan/p/2873322.html
Copyright © 2011-2022 走看看