面试题解析
1、写一个sed命令,修改/tmp/input.txt文件的内容
要求:
- 删除所有空行;
- 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB
创造测试文件:
[root@openEuler-22 scripts]# vim /tmp/input.txt
11111
22222
33333
答案:
[root@openEuler-22 scripts]# sed '/^$/d' /tmp/input.txt | sed -r 's/(.*)/AAA\1BBB/'
或(多点分开做):
[root@openEuler-22 scripts]# sed -r -e '/^$/d' -e 's/(.*)/AAA\1BBB/' /tmp/input.txt
效果截图:
2、写出SHELL函数RevertInput
要求:
- 函数必须获取三个参数,然后将三个参数倒序echo打印出来
- 函数必须检查参数个数的合法性,如果参数非法,打印”Illegal parameters”
- 对于下面的输入:RevertInput “this is para1” para2 para3
- 应该输出:
- para3
- para2
- this is para1
(注:需要注意第一个参数中的空格)
答案:
RevertInput () {
if [ $# -ne 3 ]
then
echo "Illegal parameters"
else
echo $3
echo $2
echo "this is $1"
fi
}
RevertInput "this is para1"
RevertInput "this is para1" para2 para3
效果截图:
有个知识点:Linux shell 间接变量引用
3、 设计一个shell 程序
要求:
- 在每月第一天备份并压缩/mnt 目录的所有内容,存放在/home/bak 目录里面
- 且文件如下形式:yymmdd_mnt,yy 为年,mm 为月,dd 为日.shell 程序存放在/usr/bin 目录下.
答案:
[root@openEuler-22 scripts]# vim /usr/bin/compress
#!/bin/bash
[ -d /home/bak ] || mkdir /home/bak
tar czf /home/bak/$(date +%y%m%d) /mnt
#加权限
[root@openEuler-22 scripts]# chmod +x /usr/bin/compress
#定时程序
[root@openEuler-22 scripts]# crontab -e
0 2 1 * * bash /usr/bin/compress &>/dev/null
4、awk 是一种程序语言,对文档资料的处理具有很强的功能。
例如 a.txt 文本中的内容如下:#cat a.txt
Tommy,m,25
Jean,f,19
Jack,f,18
现要求使用 awk 语句显示出 a.txt 中的第一列内容。如下
Tommy
Jean
Jack
则该语句为:
答案:
awk -F',' '{print $1}' a.txt