1 shell题目:如果/oldboy不存在则创建他(不能用if判断) 回答: [root@template ~]# [ -d /oldboy ] || mkdir /oldboy [root@template ~]# echo $? 0 [root@template ~]# ls -ld /oldboy drwxr-xr-x. 6 oldboy root 4096 Jul 17 18:12 /oldboy
2 书写一个判断语句: 如果脚本参数个数 不等于2则显示input error并退出脚本 回答: [root@template ~]# vim var.sh if [ $# -ne 2 ] ; then echo "input error" exit 1; fi [root@template ~]# bash var.sh 4 5 6 input error [root@template ~]# bash var.sh 4 input error [root@template ~]# bash var.sh 4 5
3 按要求写一个脚本: 命令行传递两个参数 判断参数个数如果不是2则显示使用帮助并退出脚本 计算两个参数的加减乘除四则运算并显示结果 回答: [root@template ~]# vim test.sh if [ $# -ne 2 ] ; then echo "USAGE:bash $0 var1 var2" exit 1; else echo "$1 + $2 =" $(($1+$2)) echo "$1 - $2 =" $(($1-$2)) echo "$1 * $2 =" $(($1*$2)) echo "$1 / $2 =" $(($1/$2)) fi [root@template ~]# bash test.sh 8 4 5 USAGE:bash test.sh var1 var2 [root@template ~]# bash test.sh 8 4 8 + 4 = 12 8 - 4 = 4 8 * 4 = 32 8 / 4 = 2
4 如何显示出如下字符串: welcome to 01oldboyedu.com class01 welcome to 02oldboyedu.com class02 welcome to 03oldboyedu.com class03 welcome to 04oldboyedu.com class04 welcome to 05oldboyedu.com class05 welcome to 06oldboyedu.com class06 welcome to 07oldboyedu.com class07 welcome to 08oldboyedu.com class08 welcome to 09oldboyedu.com class09 welcome to 10oldboyedu.com class10 回答: [root@template week6]# vim t1.sh #!/bin/bash # # # for num in {01..10} do echo "welcome to ${num}oldboyedu.com class${num}" done [root@template week6]# bash t1.sh welcome to 01oldboyedu.com class01 welcome to 02oldboyedu.com class02 welcome to 03oldboyedu.com class03 welcome to 04oldboyedu.com class04 welcome to 05oldboyedu.com class05 welcome to 06oldboyedu.com class06 welcome to 07oldboyedu.com class07 welcome to 08oldboyedu.com class08 welcome to 09oldboyedu.com class09 welcome to 10oldboyedu.com class10
5 不显示文件中的空行或只有空格的行(至少三种方法) 回答: 创建环境 [root@template ~]# cat spaceline.txt -A 101,oldboy,CEO$ $ 102,zhangyao,CTO$ 103,Alex,COO$ $ 104,yy,CFO$ $ 105,feixue,CIO$ $ 方法1: grep -v '^$' spaceline.txt 方法2: sed '/^$/d' spaceline.txt 方法3: awk '!/^$/' spaceline.txt 方法4: [root@template ~]# sed -n '/^$/!p' spaceline.sh 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO
6 把文件中每一对{}中的oldboy替换为oldgirl. oldboy { oldboy oldgirl } oldboy { oldboy oldgirl } 回答: 创建文件 [root@template ~]# cat boytogirl.txt oldboy { oldboy oldgirl } oldboy { oldboy oldgirl } 替换 [root@template ~]# sed -n '/{/,/}/p' boytogirl.txt|sed 's#oldboy#oldgirl#g' { oldgirl oldgirl } { oldgirl oldgirl }
7 显示出/etc/passwd中以0或5开头的uid的用户名和他使用的命令解释器
答案 [root@template ~]# awk -F ":" '$3~/^(0|5)/{print $1, $7}' /etc/passwd root /bin/bash sync /bin/sync mygirl /bin/bash oldboy /bin/bash 检验答案 [root@template ~]# awk -F ":" '$3~/^(0|5)/{print $1,$3, $7}' /etc/passwd root 0 /bin/bash sync 5 /bin/sync mygirl 500 /bin/bash oldboy 501 /bin/bash
8 叙述并绘图表示三次握手四次挥手过程
1.由主机A发送建立TCP连接的请求报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中SYN字段置为1,表示需要建立TCP连接
2.主机B会回复A发送的TCP连接请求报文,其中包含seq序列号,是由回复端随机生成的,并且将回复报文的SYN字段置1,而会产生ACK字段,ACK字段数值是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时,知晓自已的TCP建立请求已得到了验证
3.A端收到B端发送的TCP建立验证请求后,会使自已的序列号加1表示,并且再次回复ACK验证请求,在B端发送过来的seq基础上加1,进行回复
1、主机A发送断开TCP连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且还将报文中FIN字段置为1,表示需要断开TCP连接
2、主机B会回复A发送的TCP断开请求报文,其中包含seq序列号,是则回复端随机生成的,而且会产生ACK字段,ACK字段数值,是在A发过来的seq序列号基础上加1进行回复,以便A收到信息时,知晓自己的TCP断开请求已得到了验证
3、主机B在回复完A的TCP断开请求后,不会马上就进行TCP连接的断开,主机B会先确保断开前,所有传输到A的数据是否已经传输完毕,一旦确认传输数据完毕就会将回复报文的FIN字段置1,并产生随机seq序列号。
4、主机A收到主机B的TCP断开请求后,会回复主机B的断开请求,包含随机生成的seq字段和ack字段,ack字段会在主机B的TCP点开请求的seq基础上加1,从而完成主机B请求的验证回复。
5、至此TCP断开的4次挥手过程完毕
9 叙述DNS解析过程
回答:
1 当客户端在浏览器访问一个网址(www.qq.com)的时候,DNS客户端会检查自己的host文件及本地的DNS缓存,如果没有对应的记录
2 DNS客户端联系自己本地的DNS服务器,查询域名www.qq.com
3 NServer服务器检查自己的权威区域和本地区域缓存区域,
没有找到对应值。于是,联系根提示中的某个根域服务器查询域名www.qq.com
4 根域服务器也不知道www. qq. com的对应值于是就向 SErver返回一个参考答复,告诉其com顶级域的权威服务器
5 NServer联系.com顶级域的权威DNS服务器查询域名www.qq.com
6 .com顶级域服务器也不知道www.qq.com DNS的对应值,于是想 NServer返回一个参考答 告诉它qq.com域的权威DNS服务器的地址
7 NServer联系qq.com域的权威DNS服务器查询域名
8 qq.com的权威DNS服务器知道对应值,并返回给 NServer服务器
9 Nserver向原DNS客户端返回 www.qq.com的ip地址此时解析完成