现在2018年5月8日周二,5月11日周五,我将去面试,尤其强调了shell脚本用于管理linux系统运行。以下是复习过程。
参考
细枝末节
1如何获取一个文件每一行的第三个元素 ?
awk'{print $3}'
2假如文件中每行第一个元素是 FIND,如何获取第二个元素
awk'{ if ($1 == "FIND") print $2}'
3 如何调试 bash 脚本
将 -xv 参数加到 #!/bin/bash 后
例子:
#!/bin/bash –xv
4 如何向连接两个字符串 ?
V1="Hello"
V2="World"
V3=${V1}${V2}
echo $V3
$VAR
最好VAR在定义的时候,采用VAR="abcdefg" 这种带引号的定义。
${VAR}
这种写法比较规范,VAR在定义的时候,采用VAR=abcdefg 这种不带引号的定义也没有关系。
5 shell中$(( ))与$( )还有${ }的区别
$() 与` ` 都是用来做命令替换。 command1 $(command2 $(command3))
${} 用来做变量替换,$var 与 ${var}作用相同,推荐使用${var},这更精确
$(()) 用来做整数运算 + - * 、 % & |
如 echo $(( (a+b)% 4 ))
6 [ ] 与 [[ ]]的区别
[ ] 等同于test 如if [ condition ]
[[ ]] 使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不使用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]
for i in $(seq 0 4);do echo $i;done
for i in `seq 0 4`;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0..4};do echo $i;done
7 命令:[ -z "" ] && echo 0 || echo 1 的输出是什么
0
shell中正确执行为0,否则就是非0.
8 如何在后台运行脚本 ?
在脚本后面添加 “&”。
据 @kashu 的意见,更好的答案是:
nohup command&
& 与nohup的区别
xx.sh &
会将任务放到后台运行,一旦退出当前登录或者断开ssh连接,任务就停止
而nohup是在退出登录和关闭终端后仍然能够继续任务。
一般用法:
nohup command &
9 双引号与单引号的区别
" " 弱引用 可实现变量和命令的替换
' ' 强引用,不完成变量替换
var=asd
echo " $var" --> asd
echo ' $var' ---> $var
10 如何列出以 ab 或 xy 开头的用户名 ?
egrep "^ab|^xy" /etc/passwd|cut -d: -f1
cut : 选取指定字符并输出
-d 指定分隔符
-f 指定位置
cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
cut -f2 -d";" test2.txt
结果:
Name
tom
jack
alex
11 如何输出当前 shell 的 PID ?
echo $$