




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、非常好的十道Linux shell脚本面试题 1、编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下 #/bin/sh #Programm : # Using for move currently directory to /tmp for FileName in ls -l | awk '$5>10240 print $9' do mv $FileName /tmp done ls -al /tmp echo "Done! "
2、; 2、编写shell脚本获取本机的网络地址。 比如:本机的ip地址是:/,那么它的网络地址是 方法一: #!/bin/bash #This script print ip and network file="/etc/sysconfig/network-scripts/ifcfg-eth0" if -f $file ;then IP=grep "IPADDR" $file|awk -F"="
3、 ' print $2 ' MASK=grep "NETMASK" $file|awk -F"=" ' print $2 ' echo "$IP/$MASK" exit 1 fi 方法二: #!/bin/bash #This programm will printf ip/network # IP=ifconfig eth0 |grep 'inet ' |sed 's/.*addr:/g
4、39;|sed 's/ Bcast.*$/g' NETMASK=ifconfig eth0 |grep 'inet '|sed 's/.*Mask:/g' echo "$IP/$NETMASK" exit 3、用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下。 参考程序: #!/bin/sh FILENAME= echo “Input file name:” read FILENAME if -
5、c "$FILENAME" then cp $FILENAME /dev fi 4请为下列shell程序添加注释,并说明程序的功能和调用方法: #!/bin/sh # # /etc/rc.d/rc.httpd # # Start/stop/restart the Apache web server. # # To make Apache start automatically at boot, make this # file executable: c
6、hmod 755 /etc/rc.d/rc.httpd # case "$1" in 'start') /usr/sbin/apachectl start ; 'stop') /usr/sbin/apachectl stop ; 'restart') /usr/sbin/apachectl restart ; *) echo "usage $0 start|stop|restart" ; esac&
7、#160;参考答案: (1)程序注释 #!/bin/sh 定义实用的shell # # /etc/rc.d/rc.httpd 注释行,凡是以星号开始的行均为注释行。 # # Start/stop/restart the Apache web server. # # To make Apache start automatically at boot, make this # file executable: chmod 755 /etc/rc.d/rc.httpd # case &qu
8、ot;$1" in #case结构开始,判断“位置参数”决定执行的操作。本程序携带一个“位置参数”,即$1 'start') #若位置参数为start /usr/sbin/apachectl start ; #启动httpd进程 'stop') #若位置参数为stop /usr/sbin/apachectl stop ; #关闭httpd进程 'restart') #若位置参数为stop /usr/sbin/apachectl restart ; #重新启动httpd进程
9、60;*) #若位置参数不是start、stop或restart时 echo "usage $0 start|stop|restart" ; #显示命令提示信息:程序的调用方法 esac #case结构结束 (2)程序的功能是启动,停止或重新启动httpd进程 (3)程序的调用方式有三种:启动,停止和重新启动。 5设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30。 参考答案: #!/bin/sh i=1
10、groupadd class1 while $i -le 30 do if $i -le 9 ;then USERNAME=stu0$i else USERNAME=stu$i fi useradd $USERNAME mkdir /home/$USERNAME chown -R $USERNAME /home/$USERNAME chgrp -R class1 /home/$USERNAME i=$($i+1) done 6编写shell程序,实现自动
11、删除50个账号的功能。账号名为stud1至stud50。 参考程序: #!/bin/sh i=1 while $i -le 50 do userdel -r stud$i i=$($i+1 ) done 7某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决 方案 : (1)在下午4 :50删除/abc目录下的全部子目录和全部文件; (2)从早8:00下午6:00每小时读取/xyz目录下x1文件中每行第一个域的全部数据加入到/backup目录下的bak01.txt文件内;
12、 (3)每逢星期一下午5:50将/data目录下的所有目录和文件归档并压缩为文件:backup.tar.gz; (4)在下午5:55将IDE接口的CD-ROM卸载(假设:CD-ROM的设备名为hdc); (5)在早晨8:00前开机后启动。 参考答案: 解决方案: (1)用vi创建编辑一个名为prgx的crontab文件; prgx文件的内容: 50 16 * * * rm -r /abc/* (2)、0 8-18/1 * * * cut -f1 /xyz/x1 >> /backup/bak01
13、.txt (3)、50 17 * * * tar zcvf backup.tar.gz /data (4)、55 17 * * * umount /dev/hdc (5)、由超级用户登录,用crontab执行 prgx文件中的内容: rootxxx:#crontab prgx;在每日早晨8:00之前开机后即可自动启动crontab。 8设计一个shell程序,在每月第一天备份并压缩/etc目录的所有内容,存放在/root/bak目录里,且文件名为如下形式yymmdd_etc,yy为年,mm为月,dd为日。Shell程序filebac
14、k存放在/usr/bin目录下。 参考答案: (1)编写shell程序fileback: #!/bin/sh DIRNAME=ls /root | grep bak if -z "$DIRNAME" ; then mkdir /root/bak cd /root/bak fi YY=date +%y MM=date +%m DD=date +%d tar zcvf $BACKETC /etc echo "fileback f
15、inished!" (2)编写任务定时器: echo "0 0 1 * * /bin/sh /usr/bin/fileback" > /root/etcbakcron crontab /root/etcbakcron 或使用crontab -e 命令添加定时任务: 0 1 * * * /bin/sh /usr/bin/fileback 9有一普通用户想在每周日凌晨零点零分定期备份/user/backup到/tmp目录下,该用户应如何做? 参考答案:(1)第一种方法: 用户应使用c
16、rontab e 命令创建crontab文件。格式如下: 0 0 * * sun cp r /user/backup /tmp (2)第二种方法: 用户先在自己目录下新建文件file,文件内容如下: 0 * * sun cp r /user/backup /tmp 然后执行 crontab file 使生效。 10设计一个Shell程序,在/userdata目录下建立50个目录,即user1user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。 参
17、考答案: 建立程序 Pro16如下: #!/bin/sh i=1 while i -le 50 do if -d /userdata ;then mkdir -p -m 754 /userdata/user$i 加上-m 754 就不用写下面那一句了 -p 是递归建立目录 #chmod 754 /userdata/user$i echo "user$i" let "i = i + 1" (或i=$($i+1) else
18、;mkdir /userdata mkdir -p -m /userdata/user$i #chmod 754 /userdata/user$i echo "user$i" let "i = i + 1" (或i=$($i1) fi done1) 如何向脚本传递参数 ?./script argument例子 : 显示文件名称脚本./show.sh file1.txtcat show.sh#!/bin/bashcat $12) 如何在脚本中使用参数 ?第一个参数 : $1,第二个参数 : $2例
19、子 : 脚本会复制文件(arg1) 到目标地址(arg2)./copy.sh file1.txt /tmp/cat copy.sh#!/bin/bashcp $1 $23) 如何计算传递进来的参数 ?$#4) 如何在脚本中获取脚本名称 ?$05) 如何检查之前的命令是否运行成功 ?$?6) 如何获取文件的最后一行 ?tail -17) 如何获取文件的第一行 ?head -18) 如何获取一个文件每一行的第三个元素 ?awk 'print $3'9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素awk ' if ($1 = "FIND")
20、print $2'10) 如何调试 bash 脚本将 -xv 参数加到 #!/bin/bash 后例子:#!/bin/bash xv11) 举例如何写一个函数 ?function example echo "Hello world!"12) 如何向连接两个字符串 ?V1="Hello"V2="World"V3=$V1$V2echo $V3输出HelloWorld13) 如何进行两个整数相加 ?V1=1V2=2let V3=$V1+$V2echo $V3输出3据 kashu 的意见,本题的更佳回答为:两个整数相加,还有若干种方法
21、实现:A=5B=6echo $($A+$B) # 方法 2echo $A+$B # 方法 3expr $A + $B # 方法 4echo $A+$B | bc # 方法 5awk 'BEGINprint '"$A"'+'"$B"'' # 方法 614) 如何检查文件系统中是否存在某个文件 ?if -f /var/log/messages thenecho "File exists"fi15) 写出 shell 脚本中所有循环语法 ?for 循环 :for i in $( ls ); d
22、oecho item: $idonewhile 循环 :#!/bin/bashCOUNTER=0while $COUNTER -lt 10 ; doecho The counter is $COUNTERlet COUNTER=COUNTER+1doneuntil 循环 :#!/bin/bashCOUNTER=20until $COUNTER -lt 10 ; doecho COUNTER $COUNTERlet COUNTER-=1done16) 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?这一行说明要使用的 shell。#!/bin/bash 表示脚本使
23、用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python。(LCTT译注:这一行称之为释伴行。)17) 如何获取文本文件的第 10 行 ?head -10 file|tail -118) bash 脚本文件的第一个符号是什么#19) 命令: -z "" && echo 0 | echo 1 的输出是什么020) 命令 “export” 有什么用 ?使变量在子 shell 中可用。21) 如何在后台运行脚本 ?在脚本后面添加 “&”。据 kashu 的意见,更好的答案是:nohup command &大部分时间
24、我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &没了.22) "chmod 500 script" 做什么 ?使脚本所有者拥有可执行权限。23) ">" 做什么 ?重定向输出流到文件或另一个流。24) & 和 && 有什么区别· & - 希望脚本在后台运行的时候使用它· && - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它25) 什么时候要在 condition 之前使用 “if” ?当条件满足时需要运行多条命令的时候。26)
25、 命令: name=John && echo 'My name is $name' 的输出是什么My name is $name27) bash shell 脚本中哪个符号用于注释 ?#28) 命令: echo $new:-variable 的输出是什么variable29) ' 和 " 引号有什么区别 ?· ' - 当我们不希望把变量转换为值的时候使用它。· " - 会计算所有变量的值并用值代替。30) 如何在脚本文件中重定向标准输出和标准错误流到 log.txt 文件 ?在脚本文件中添加 "e
26、xec >log.txt 2>&1" 命令。31) 如何只用 echo 命令获取字符串变量的一部分 ?echo $variable:x:yx - 起始位置y - 长度例子:variable="My name is Petras, and I am developer."echo $variable:11:6 # 会显示 Petras32) 如果给定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令获取 home_dir ?echo $variable#*:*:*:或echo
27、$variable#*:33) 如何从上面的字符串中获取 “User” ?echo $variable%:*:*:*或echo $variable%:*34) 如何使用 awk 列出 UID 小于 100 的用户 ?awk -F: '$3<100' /etc/passwd35) 写程序为用户计算主组数目并显示次数和组名cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c gdo echo $c; grep :$g: /etc/group|cut -d: -f1;|xargs -n 2done36) 如何在 bash s
28、hell 中更改标准的域分隔符为 ":" ?IFS=":"37) 如何获取变量长度 ?$#variable38) 如何打印变量的最后 5 个字符 ?echo $variable: -539) $variable:-10 和 $variable: -10 有什么区别?· $variable:-10 - 如果之前没有给 variable 赋值则输出 10;如果有赋值则输出该变量· $variable: -10 - 输出 variable 的最后 10 个字符40) 如何只用 echo 命令替换字符串的一部分 ?echo $variable
29、/pattern/replacement41) 哪个命令将命令替换为大写 ?tr ':lower:' ':upper:'42) 如何计算本地用户数目 ?wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -l43) 不用 wc 命令如何计算字符串中的单词数目 ?set $stringecho $#44) "export $variable" 或 "export variable" 哪个正确 ?export variable45) 如何列出第二个字母
30、是 a 或 b 的文件 ?ls -d ?ab*46) 如何将整数 a 加到 b 并赋值给 c ?c=$(a+b)或c=expr $a + $b或c=echo "$a+$b"|bc47) 如何去除字符串中的所有空格 ?echo $string|tr -d " "48) 重写这个命令,将输出变量转换为复数: item="car" echo "I like $item" ?item="car" echo "I like $items"49) 写出输出数字 0 到 100 中 3 的
31、倍数(0 3 6 9 )的命令 ?for i in 0.100.3; do echo $i; done或for ( i=0; i<=100; i=i+3 ); do echo "Welcome $i times" done50) 如何打印传递给脚本的所有参数 ?echo $*或echo $51) $a = $b 和 $a -eq $b 有什么区别· $a = $b - 用于字符串比较· $a -eq $b - 用于数字比较52) = 和 = 有什么区别· = - 用于为变量赋值· = - 用于字符串比较53) 写出测试 $a 是
32、否大于 12 的命令 ? $a -gt 12 54) 写出测试 $b 是否小于等于 12 的命令 ? $b -le 12 55) 如何检查字符串是否以字母 "abc" 开头 ? $string = abc* 56) $string = abc* 和 $string = "abc*" 有什么区别· $string = abc* - 检查字符串是否以字母 abc 开头· $string = "abc" - 检查字符串是否完全等于 abc57) 如何列出以 ab 或 xy 开头的用户名 ?egrep "ab|x
33、y" /etc/passwd|cut -d: -f158) bash 中 $! 表示什么意思 ?后台最近执行命令的 PID.59) $? 表示什么意思 ?前台最近命令的结束状态。60) 如何输出当前 shell 的 PID ?echo $61) 如何获取传递给脚本的参数数目 ?echo $#(LCTT 译注:和第3题重复了。)62) $* 和 $ 有什么区别· $* - 以一个字符串形式输出所有传递到脚本的参数· $ - 以 $IFS 为分隔符列出所有传递到脚本中的参数63) 如何在 bash 中定义数组 ?array=("Hi" "
34、my" "name" "is")64) 如何打印数组的第一个元素 ?echo $array065) 如何打印数组的所有元素 ?echo $array66) 如何输出所有数组索引 ?echo $!array67) 如何移除数组中索引为 2 的元素 ?unset array268) 如何在数组中添加 id 为 333 的元素 ?array333="New_element"69) shell 脚本如何获取输入的值 ?a) 通过参数./script param1 param2b) 通过 read 命令read -p "De
35、stination backup Server : " desthost70) 在脚本中如何使用 "expect" ?/usr/bin/expect << EODspawn rsync -ar $line $desthost:$destpathexpect "*?assword:*"send "$passwordr"expect eofEOD1、用sed修改test.txt的23行test为tset; sedi 23s/test/tset/g test.txt2、查看/web.log第25
36、行第三列的内容。 sedn 25p /web.log | cut d “ ” f3 headn25 /web.log | tail n1 | cut d “ ” f3 awkF “ ” NR=23print $3 /web.log3、删除每个临时文件的最初三行。 sedi 1,3d /tmp/*.tmp4、脚本编程:求100内的质数。 #!/bin/bash i=1 while $i -le 100 ;do
37、0; ret=1 for( j=2;j<$i;j+ );do if $($i%$j)-eq 0 thenret=0break fi done if $ret -eq 1 ;then echo-n "$i "
38、160;fi i=$(i+1 ) done5、晚上11点到早上8点之间每两个小时查看一次系统日期与时间,写出具体配置命令 echo1 23,1-8/2 * * * root /tmp/walldate.sh >> /etc/crontab6、编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下 #!/bin/bash fileinfo=($(du./*) length=$#fileinfo
39、0; for(i=0;i<$length;i=$(i+2 );do if $fileinfo$i -le 10 ;then mv $fileinfo$(i+1 ) /tmp fi done7、如何将本地80端口的请求转发到8080端口,当前主机IP为 /sbin/iptables-t nat -A PREROUTING -p tcp -dport 80 -j DNAT -to :8
40、080 /sbin/iptables-t nat -A PREROUTING -p tcp -dport 80 -j REDIRECT -to 80808、在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh 怎么实现 echo"1 6-12/2 * * * root /usr/bin/httpd.sh >> /etc/crontab"9、在shell环境如何杀死一个进程? psaux | grep | cut -f?
41、得到pid cat/proc/pid killpid10、在shell环境如何查找一个文件? find/ -name abc.txt11、在shell里如何新建一个文件? touch/newfile.txt12、Linux下面的sed和awk的编写1)如何显示文本file.txt中第二大列大于56789的行? awk -F "," 'if($2>56789)print $0' file.txt2)显示file.txt的1,3,5,7,10,15行
42、? sed -n "1p;3p;5p;7p;10p;15p" file.txt awk 'NR=1|NR=3|NR=5|NR=15print $0' file.txt3)将file.txt的制表符,即tab,全部替换成"|" sed-i "s#t#|#g" file.txt13、把当前目录(包含子目录)下所有后缀为“.sh”的文件后缀变更为“.shell” #!/bin/bash str=find./ -nam
43、e *.sh fori in $str do mv$i $i%shshell done14、编写shell实现自动删除50个账号功能,账号名为stud1至stud50 #!/bin/bash for(i=1;i<=50;i+);do userdel stud$i done15、请用Iptables写出只允许79 访问本服务器的22端口。 /sbin/iptables -A input -p tcp -dport 22 -s 79 -j ACCEPT /sbin/iptables -A input -p udp -dport 22 -s 79 -j ACCEPT /sbin/iptables -P input -j DROP16、在shell中变量的赋值有四种方法,其中,采用name=12的方法称( A )。A直接赋值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗领域的新机遇区块链技术的市场应用与前景
- 医疗设备操作规范与质量控制
- 医疗大数据分析在医疗服务中的应用
- 2025年试用期转正工作总结模版
- 医疗大数据下的患者满意度分析
- AI技术在手术辅助系统中的伦理边界探讨
- 医学伦理在中药治疗技术传播中的作用研究
- 生产部门2025年度工作总结模版
- 代课老师聘用合同范例
- 医患沟通艺术与销售沟通技巧共通点解析
- 国开【形考】《管理英语(3)》形成性考核1-8答案
- 起诉意见书(公安)
- 2023学年完整公开课版用户思维
- 医院获得性肺炎的诊断与治疗
- 新产品试产工作指引
- 松下伺服驱动器说明书
- 实验:验证动量守恒定律 说课课件
- 连杆加工工艺规程及夹具设计工序卡-工艺规程卡
- 动态轨道衡电子称重仪及定量称重控制系统设计概要
- 2023-2024学年浙江省舟山市小学语文二年级下册期末自测模拟试卷
- 新生儿早期基本保健(EENC)指南要点解读课件
评论
0/150
提交评论