掌握Shell脚本的编写和使用是Linux工程师和运维人员的必备技能,也是企业面试的必考点,以下是一些在面试过程中经常会遇到的Shell脚本面试问题及解答。
Shell脚本是什么,它是必需的吗?
一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以在一个文本文件(Shell)脚本中添加所有这些命令来完成日常工作任务。
什么是默认登录Shell,如何改变指定用户的登录Shell?
在Linux操作系统中,/bin/bash
是默认登录Shell,在创建用户时分配。使用chsh
命令可以改变默认的Shell,如下所示:
可以在Shell脚本中使用哪些类型的变量?
在Shell脚本中,我们可以使用两种类型的变量:系统定义变量和用户定义变量。
系统变量是由系统自己创建的,这些变量通常由大写字母组成,可通过set
命令查看。
用户变量是由系统用户生成并定义的,变量的值可以通过命令echo $<变量名>
查看。
如何将标准输出和错误输出同时重定向到同一位置?
这里有两个方法可以实现:
Shell脚本中if语法如何嵌套?
基础语法如下:
Shell脚本中“$?”标记的用途是什么?
在编写Shell脚本时,如果你想要检查上一条命令是否执行成功,在if
条件中使用$?
可以来检查上一条命令的结束状态。简单的例子如下:
如果结束状态是0
,说明上一条命令执行成功。
如果结束状态不是0
,说明执行失败。
在Shell脚本中如何比较两个数字?
在if-then
中使用测试命令如-gt
来比较两个数字:
Shell脚本中break命令的作用?
break
命令一个简单的用途是退出执行中的循环,我们可以在while
和until
循环中使用break
命令跳出循环。
Shell脚本中continue命令的作用?
continue
命令不同于break
命令,它只跳出当前循环的迭代,而不是整个循环。continue
命令很多时候是非常有用的——例如当有错误发生,但我们依然希望执行上层循环时。
Shell脚本中case语句的语法?
基础语法如下:
Shell脚本中for循环语法?
基础语法如下:
Shell脚本中while循环语法?
如同for
循环,while
循环只要条件成立就会重复执行命令块。不同于for
循环的是,while
循环会不断迭代,直到循环条件不为真。
例如:
do-while语句的基本格式?
do-while
语句类似于while
语句,但检查条件语句之前先执行命令(意即至少执行一次):
如何使脚本可执行?
使用chmod
命令为赋予脚本可执行权限:
“#!/bin/bash”的作用?
#!/bin/bash
是Shell脚本的第一行,称为释伴(shebang)行。这里#
符号叫做hash,而!
叫做bang。它的意思是命令通过/bin/bash
来执行。
如何调试Shell脚本?
使用-x
参数可以调试Shell脚本:
另一种方法是使用-nv
参数:
Shell脚本如何比较字符串?
test
命令可以用来比较字符串,测试命令会通过比较字符串中的每一个字符来进行比较。
Bourne Shell(bash)中有哪些特殊的变量?
下表列出了bash
中为命令行设置的特殊变量:
内建变量 | 解释 |
---|---|
$0 | 命令行中脚本名称 |
$1 | 第一个命令行参数 |
$2 | 第二个命令行参数 |
… | … |
$9 | 第九个命令行参数 |
$# | 命令行参数的数量 |
$* | 所有命令行参数,以空格隔开 |
在Shell脚本中如何测试文件?
test
命令也可以用来测试文件。下表列出了基础用法:
test | 用法 |
---|---|
-e <文件名> | 如果文件存在,返回true |
-d <文件名> | 如果文件存在并且是目录,返回true |
-f <文件名> | 如果文件存在并且是普通文件,返回true |
-s <文件名> | 如果文件存在并且不为空,返回true |
-r <文件名> | 如果文件存在并可读,返回true |
-w <文件名> | 如果文件存在并可写,返回true |
-x <文件名> | 如果文件存在并可执行,返回true |
在Shell脚本中如何写入注释?
注释可以用来描述一个脚本可以做什么和它是如何工作的,每一行注释以#
开头:
如何让Shell脚本得到来自终端的输入?
read
命令可以读取来自终端(使用键盘输入)的数据。read
命令得到用户的输入并置于给定的变量中:
如何取消变量或取消变量赋值?
unset
命令可用于取消变量或取消变量赋值:
如何执行算术运算?
可以使用expr
命令:
或使用$[ 表达式 ]
:
如何在Shell脚本中定义函数?
在Shell中可以通过以下两种语法来定义函数,分别如下:
或者
当函数定义好了以后,用户就可以通过函数名来调用该函数,函数调用的基本语法如下:
下面定义了一个sayhello()
方法,并调用:
代码调用结果
如何在 Shell 脚本中使用 BC(bash计算器)?
在Shell脚本中使用bc
的语法如下:
例如下面计算1+2+3+...+10
的计算结果
参考文章