1、Shell部分(35分)
1.1、$*, $@, $#,$0,$?有什么区别?(3分)
[答] $*和$@都表示参数列表; $#表示参数的个数,常用于循环; $0表示当前脚本名称; $?表示上一个命令退出的状态码.1.2、如何获取文本文件的第10行(2分)
[答]
1) cat a.txt | awk 'NR==10'
2) cat a.txt | sed '10!d'
3) cat a.txt | head -n 10 | tail -n 1
4) cat a.txt | grep -E "^10"
1.3、假如文件中每行第一个元素是Find,如何获取第二个元素
[答] awk '{ if ($1 == "FIND") print $2}'1.4、两个整数相加,还有若干种方法实现
[答]:
A=5
B=6
echo $(($A+$B)) # 方法 2
echo $[$A+$B] # 方法 3
expr $A + $B # 方法 4
echo $A+$B | bc # 方法 5
awk 'BEGIN{print '"$A"'+'"$B"'}' # 方法 6
1.5、如何检查文件系统中是否存在某个文件
答:find + filename
1.6、如何在后台运行脚本
1. 使用&符号在后台执行命令
你可以在Linux命令或者脚本后面增加&符号,从而使命令或脚本在后台执行,例如:
$ ./my-shell-script.sh &
2. 使用nohup在后台执行命令
使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup命令,如下所示:
$ nohup ./my-shell-script.sh &
3. 使用screen执行命令
通过nohup和&符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。但是,你无法重新连接到这个会话,要想重新连接到这个会话,你可以使用screen命令。
Linux的screen命令提供了分离和重新连接一个会话的功能。当你重新连接这个会话的时候,你的终端和你分离的时候一模一样。
4. 使用at将一个命令作为批处理执行
使用at命令,你可以让一个命令在指定的日期和时间运行,例如要在明天上午10点在后台执行备份脚本,执行下面的命令:
$ at -f backup.sh 10 am tomorrow
5. 使用watch连续地执行一个命令
要想按一个固定的间隔不停地执行一个命令,可以使用watch命令,如下所示:
$ watch df -h
1.7、如何在脚本文件中重定向标准输出和标准错误流到log.txt 文件?
在脚本文件中添加 "exec >log.txt 2>&1" 命令。
1.8 ${variable:-10} 和${variable: -10} 有什么区别?(2分)
答:
${variable:-10} - 如果之前没有给 variable 赋值则输出 10;如果有赋值则输出该变量
${variable: -10} - 输出 variable 的最后 10 个字符
1.9 哪个命令将命令替换为大写?(2分)
答:tr '[:lower:]' '[:upper:]'
1.10 [[$string == abc*]] 和 [[$string == “abc”]] 有什么区别?
答:
[[ $string == abc* ]] - 检查字符串是否以字母 abc 开头
[[ $string == "abc" ]] - 检查字符串是否完全等于 abc
1.11 如何在bash中定义数组?如何打印数组的所有元素?如何输出所有数组索引?
答:定义数组:
1)用[]操作符
2)使用()直接赋值
3)用declare –a定义数组.这种方法可以将一个空的变量定义成数组类型
4)从文件中读取数组
打印数组的所有元素:
1)按索引来遍历
#!/bin/bash
names=(Jerry Alice David Wendy)
for((i=0;i<${#names[*]};i++))
do
echo ${names[$i]}
done
2)不按索引来遍历