作为一名IT工程师,尤其是Linux软件工程师,shell脚本的编写是必不可少的技能。面试中时常会遇到shell方面的提问,那么面试官会问什么呢?本篇我就带来常见的提问及解答。
引言:身边不少shell学习者,在刚开始学习shell总喜欢玩些花活,基本知识不扎实。其实在工作中没有那么多花活,工作中更多要求的是解决思路,不是说写个贪吃蛇这类小游戏就可以了,而良好的解决思路需要工作的磨练。刚开始,我们还是要扎实基础,因为面试官不会问你shell怎么实现贪吃蛇的。
写脚本中你?
什么是Shell脚本及如何查看你用的Shell
不用那么高大上的理解,Shell脚本就是一个文本文件,什么文本文件呢?包含Shell命令及代码块的文本文件,帮助我们有序的处理一些事情。如何查看自己用的是哪一个Shell解释器呢?如下:
# 终端输入
echo $SHELL
“#! /bin/bash”什么用途
我们都知道Shell解释器有很多种,具体有什么就不多少了。这句话就是指定Shell解释器去解释我们的脚本。其实,不带这行也是可以的,脚本就可以直接执行了,当然权限要给够,它会按照Linux系统默认的解释器去解释。当然,我们也可以指定其他解释器去解释它。
# 如下两种执行方式
./file
/bin/bash file
变量分类
我的总结有两种分类。第一种是按照变量值分为普通变量、命令变量,第二种是按照作用域分为局部变量、全局变量、环境变量。演示如下:
# 普通变量和命令变量
Var_1="shell"
Var_2=`ls`
Var_3=$(ls)
#局部变量、全局变量和环境变量
Var_4="shell" #函数外部
local Var_5="shell" #函数内部局部变量可覆盖同名全局变量
echo $SHELL #这个SHELL就是环境变量
标准错误、标准输出重定向到日志文件里
重定向操作其实没啥,我们用的最多的就是输出重定向,及标准输出、标准错误重定向到文件里。操作很简单,如下所示:
/bin/bash shell_file > output_file 2>&1
/bin/bash shell_file &> output_file
$?是什么意思
Shell执行完毕每个命令都会有一个返回值,这个返回值就是用$?去接收。一般$?等于0则表示上个命令执行成功,否则就是失败,具体可查看日志文件或者标准输出。所示我们会用这个$?去做一些逻辑判断,去执行不同的代码。
VAR=`ls`
if [ ${VAR} -ne 0 ];then
代码1
else
代码2
fi
break的作用
这个就通用理解了,跟C语言一样,在循环中,遇到条件,我们可以使用break跳出循环去执行下段代码。当然,continue还是继续新的循环,跳过了循环块中的后续代码。
for循环使用方式
这个跟C语言有点区别,有两种方式去操作,如下所示:
for 变量名 in 变量取值列表
do
执行语句
done
for x in $(seq 2)
do
echo $x
done
for((exp1;exp2;exp3))
do
执行语句
done
for((x=1;x