作为一名IT工程师,尤其是Linux软件工程师,shell脚本的编写是必不可少的技能。面试中时常会遇到shell方面的提问,那么面试官会问什么呢?本篇我就带来常见的提问及解答。
引言:身边不少shell学习者,在刚开始学习shell总喜欢玩些花活,基本知识不扎实。其实在工作中没有那么多花活,工作中更多要求的是解决思路,不是说写个贪吃蛇这类小游戏就可以了,而良好的解决思路需要工作的磨练。刚开始,我们还是要扎实基础,因为面试官不会问你shell怎么实现贪吃蛇的。
写脚本中你?
不用那么高大上的理解,Shell脚本就是一个文本文件,什么文本文件呢?包含Shell命令及代码块的文本文件,帮助我们有序的处理一些事情。如何查看自己用的是哪一个Shell解释器呢?如下:
# 终端输入
echo $SHELL
我们都知道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
这个就通用理解了,跟C语言一样,在循环中,遇到条件,我们可以使用break跳出循环去执行下段代码。当然,continue还是继续新的循环,跳过了循环块中的后续代码。
这个跟C语言有点区别,有两种方式去操作,如下所示:
for 变量名 in 变量取值列表
do
执行语句
done
for x in $(seq 2)
do
echo $x
done
for((exp1;exp2;exp3))
do
执行语句
done
for((x=1;x<3;x++))
do
echo $x
done
这个是Shell独一无二的。$0表示脚本名,$1表示脚本的第一个命令行参数...$9表示脚本的第九个命令行参数,大于10个参数的表示则用${10...},获取命令行参数个数则用$#,获取命令行参数信息则用$*。
有四种方式:test、[]、[[]]、(())。但是使用方式略有区别,我们要做的就是记着运算符的使用方式以及边界空格问题,一般新手会在这里“入坑”。如下图所示:
测试表达式{test、[]、[[]]、(())}使用区别
这里流程控制语句就说了一个for循环,当然还有其它也是常用的,都可以去掌握一下。基础知识其实也就这么些,这些掌握了牢固,日常工作需求还是可以完成的。
喜欢的点赞支持一下,谢谢!