精心汇总的 24 道 shell 脚本面试题

640?wx_fmt=gif

640?wx_fmt=jpeg

Linux编程 点击右侧关注,免费入门到精通! 640?wx_fmt=jpeg


作者丨linuxtechi

http://linux.cn/article-5311-1.html


虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到 shell 脚本的问题,它有助于你在工作环境中自动完成很多任务。


如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答:


640?wx_fmt=gifQ:1 Shell脚本是什么、它是必需的吗?


答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。


640?wx_fmt=gifQ:2 什么是默认登录shell,如何改变指定用户的登录shell


答:在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。使用chsh命令可以改变默认的shell。示例如下所示:


# chsh <用户名> -s <新shell>
# chsh linuxtechi -s /bin/sh


640?wx_fmt=gifQ:3 可以在shell脚本中使用哪些类型的变量?


答:在shell脚本,我们可以使用两种类型的变量:


系统定义变量


用户定义变量


系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。


用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。


640?wx_fmt=gifQ:4 如何将标准输出和错误输出同时重定向到同一位置?


答:这里有两个方法来实现:


方法一:


2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )


方法二:


&> (如# ls /usr/share/doc &> out.txt )


640?wx_fmt=gifQ:5 shell脚本中“if”语法如何嵌套?


答:基础语法如下:


if [ 条件 ]
then
命令1
命令2
…..
else
if [ 条件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi


640?wx_fmt=gifQ:6 shell脚本中“$?”标记的用途是什么?


答:在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。简单的例子如下:


root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?
0


如果结束状态是0,说明前一个命令执行成功。


root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2


如果结束状态不是0,说明命令执行失败。


640?wx_fmt=gifQ:7 在shell脚本中如何比较两个数字 ?


答:在if-then中使用测试命令( -gt 等)来比较两个数字,例子如下:


#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi


640?wx_fmt=gifQ:8 shell脚本中break命令的作用 ?


答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。


640?wx_fmt=gifQ:9 shell脚本中continue命令的作用 ?


答:continue命令不同于break命令,它只跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。


640?wx_fmt=gifQ:10 告诉我shell脚本中Case语句的语法 ?


答:基础语法如下:


case 变量 in
值1)
命令1
命令2
…..
最后命令
!!
值2)
命令1
命令2
……
最后命令
;;
esac


640?wx_fmt=gifQ:11 shell脚本中while循环语法 ?


答:如同for循环,while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:


while [ 条件 ]
do
命令…
done


640?wx_fmt=gifQ:12 如何使脚本可执行 ?


答:使用chmod命令来使脚本可执行。例子如下:


# chmod a+x myscript.sh


640?wx_fmt=gifQ:13 “#!/bin/bash”的作用 ?


答:#!/bin/bash是shell脚本的第一行,称为释伴(shebang)行。这里#符号叫做hash,而! 叫做 bang。它的意思是命令通过 /bin/bash 来执行。


640?wx_fmt=gifQ:14 shell脚本中for循环语法 ?


答:for循环的基础语法:


for 变量 in 循环列表
do
命令1
命令2
….
最后命令
done


640?wx_fmt=gifQ:15 如何调试shell脚本 ?


答:使用'-x'参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。


640?wx_fmt=gifQ:16 shell脚本如何比较字符串?


答:test命令可以用来比较字符串。测试命令会通过比较字符串中的每一个字符来比较。


640?wx_fmt=gifQ:17 Bourne shell(bash) 中有哪些特殊的变量 ?


答:下面的表列出了Bourne shell为命令行设置的特殊变量。


内建变量    解释
$0    命令行中的脚本名字
$1    第一个命令行参数
$2    第二个命令行参数
…..    …….
$9    第九个命令行参数
$#    命令行参数的数量
$*    所有命令行参数,以空格隔开


640?wx_fmt=gifQ:18 在shell脚本中,如何测试文件 ?


答:test命令可以用来测试文件。基础用法如下表格:


Test         用法
-d 文件名    如果文件存在并且是目录,返回true
-e 文件名    如果文件存在,返回true
-f 文件名    如果文件存在并且是普通文件,返回true
-r 文件名    如果文件存在并可读,返回true
-s 文件名    如果文件存在并且不为空,返回true
-w 文件名    如果文件存在并可写,返回true
-x 文件名    如果文件存在并可执行,返回true


640?wx_fmt=gifQ:19 在shell脚本中,如何写入注释 ?


答:注释可以用来描述一个脚本可以做什么和它是如何工作的。每一行注释以#开头。例子如下:


#!/bin/bash
# This is a command
echo “I am logged in as $USER


640?wx_fmt=gifQ:20 如何让 shell 就脚本得到来自终端的输入?


答:read命令可以读取来自终端(使用键盘)的数据。read命令得到用户的输入并置于你给出的变量中。例子如下:


# vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo “My Name is $name
# ./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi


640?wx_fmt=gifQ:21 如何取消变量或取消变量赋值 ?


答:“unset”命令用于取消变量或取消变量赋值。语法如下所示:


# unset <变量名>


640?wx_fmt=gifQ:22 如何执行算术运算 ?


答:有两种方法来执行算术运算:


1.使用expr命令


# expr 5 + 2


2.用一个美元符号和方括号($[ 表达式 ])例如:


test=$[16 + 4] ; test=$[16 + 4]


640?wx_fmt=gifQ:23 do-while语句的基本格式 ?


答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次。)。下面是用do-while语句的语法


do
{
命令
while (条件)


640?wx_fmt=gifQ:24 在shell脚本如何定义函数呢 ?


答:函数是拥有名字的代码块。当我们定义代码块,我们就可以在我们的脚本调用函数名字,该块就会被执行。示例如下所示:


$ diskusage () { df -h ; }
译注:下面是我给的shell函数语法,原文没有
function ] 函数名 [()]
{
命令;
[return int;]
}


 推荐↓↓↓ 

640?wx_fmt=png

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png万水千山总是情,点个 “ 好看” 行不行
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 以下是一些常见的shell面试题及答案: 1. 什么是shell? 答:Shell是一种用于访问操作系统内核服务的命令行界面,它允许用户与操作系统交互,并执行各种操作。 2.请描述一下Linux中的进程和线程? 答:进程是操作系统中独立运行的程序,它有自己的内存空间和系统资源。线程是进程中的一个执行单元,它可以独立运行并且可以共享进程的资源。 3.请描述一下如何使用grep命令来查找文件中的特定字符串? 答:使用grep命令可以在文件中查找特定字符串。语法如下:grep 'string' fileName.例如: grep 'hello' test.txt 4.请描述一下如何使用sed命令来替换文件中的文本? 答:使用sed命令可以替换文件中的文本。语法如下:sed 's/old-text/new-text/g' fileName.例如: sed 's/hello/world/g' test.txt 5.请描述一下如何使用awk命令来处理文本文件? 答:awk命令是一种强大的文本处理工具,可以用来解析和操作文本文件。语法如下:awk 'pattern { action }' fileName. 例如:awk '{print $1}' test.txt 6.请描述一下如何使用cut命令来剪切1. 什么是 shell? 答:shell 是一种用于访问操作系统服务的命令行界面。它提供了用于交互式访问和执行操作系统命令的方法。 2. 什么是 shell 脚本? 答:shell 脚本是一种使用 shell 命令编写的脚本程序,可以在 shell 中执行。它可以包含一系列命令和流程控制结构,用于自动执行常见任务。 3. 什么是变量? 答:变量是存储值的占位符。在 shell 脚本中,变量可用于存储和引用值,如字符串或数字。 4. 怎样在 shell 中创建变量? 答:在 shell 中创建变量,需要使用等号 (=) 将变量名和值相关联。如: ``` name="John Doe" ``` 5. 怎样在 shell 中调用变量? 答:在 shell 中调用变量,需要在变量前面加上美元符号($)。如: ``` echo $name ``` 6. 怎么在 shell 中使用条件语句? 答:在 shell 中使用条件语句需要使用 if 关键字,并使用 test 命令或者 [] 来测试条件是否成立。如: ``` if [ $a -gt $b ] then echo "a is greater than b" fi ``` 7. 怎么在 shell 中使用循环语句? 答:在 shell 中使用循环语句可以使用 for 和 while 关1. 什么是 ShellShell 是一种命令解释器,它提供了在操作系统与用户之间进行交互的接口。 2. 常见的 Shell 类型有哪些? 常见的 Shell 类型有:bash, csh, ksh, tcsh, zsh 等。 3. Shell 中如何执行外部程序? 在 Shell 中可以使用 "./program_name" 或 "program_name" 的形式来执行外部程序。 4. Shell 中如何查看进程? 在 Shell 中可以使用 "ps" 命令来查看当前系统中的进程。 5. Shell 中如何查看磁盘使用情况? 在 Shell 中可以使用 "df" 命令来查看磁盘使用情况。 6. Shell 中如何查看文件或目录的权限? 在 Shell 中可以使用 "ls -l" 命令来查看文件或目录的权限。 7. Shell 中如何创建一个目录? 在 Shell 中可以使用 "mkdir directory_name" 命令来创建一个目录。 8. Shell 中如何删除一个文件? 在 Shell 中可以使用 "rm file_name" 命令来删除一个文件。 9. Shell 中如何重命名一个文件? 在 Shell 中可以使1. 什么是 shell? 答:shell 是一种操作系统的命令解释器,它提供了一种用户与操作系统进行交互的方式。 2. 什么是 shell 脚本? 答:shell 脚本是一种用来在 shell 中执行的脚本程序,它由一系列 shell 命令组成。 3. 如何查看当前使用的 shell? 答:使用命令 echo $SHELL 可以查看当前使用的 shell。 4. 如何执行一个 shell 脚本? 答:使用命令 sh script.sh 或者 bash script.sh 来执行一个 shell 脚本。 5. 什么是变量? 答:变量是一种存储值的容器,在 shell 中可以使用变量来存储和管理数据。 6. 如何设置和使用变量? 答:使用命令 variable_name=value 来设置变量,使用 $variable_name 来使用变量。 7. 什么是环境变量? 答:环境变量是一种特殊的变量,它在整个系统中都可以使用,用于存储系统相关的配置信息。 8. 什么是 $PATH? 答:$PATH 是一个环境变量,它存储了系统中可执行程序的搜索路径。 9. 什么是 $HOME? 答:$HOME 是一个环境变量,它存储了当前用户的主目录的路径。 10. 什么是条件语句? 答1. 什么是shell? 答:Shell是一种命令行界面的操作系统,它提供了一种简单的方式来交互和控制底层操作系统。 2. 你知哪些常用的shell? 答:常用的shell有Bash,Zsh,Ksh和Csh。 3. 你能说出几个shell脚本常用的控制结构? 答:if-else, for, while, case, until。 4. 你能解释一下什么是环境变量? 答:环境变量是一种特殊类型的变量,可以在shell会话或者整个操作系统中共享,环境变量可以用来存储系统配置信息和用户设置信息。 5. 你能简单描述一下如何使用grep命令? 答:grep命令可以在文本文件中搜索指定的字符串。语法为 "grep [options] 'pattern' file" 。例如:“grep 'hello' test.txt” 会在test.txt文件中搜索hello。 ### 回答2: 随着Linux的普及和应用场景的不断扩大,越来越多企业对于拥有shell技能的人才的需求也越来越大。在面试中,关于shell技能相关的问题也逐渐增多。下面就让我们来详细了解一下常见的shell面试题及答案。 1. 什么是shellshell是操作系统的外壳,它是用户与系统内核之间的接口,提供了用户与操作系统交互的方法。shell可以接收用户的命令,并将其转换为操作系统的命令进行执行,同时还可以执行脚本文件,对一些复杂的任务进行自动化处理。 2. 如何查看当前使用的shell版本? 在Linux系统中,可以使用echo $SHELL命令来查看当前使用的shell版本。 3. 如何设置环境变量? 可以使用export命令来设置环境变量,比如: export PATH=$PATH:/usr/local/bin 表示将/usr/local/bin目录加入到PATH环境变量中。 4. 如何列出当前目录下的所有文件及目录? 可以使用ls命令来列出当前目录下的所有文件及目录,如: ls -al 其中,a表示显示所有文件及目录(包括隐藏文件),l表示以长格式显示。 5. 如何创建目录? 可以使用mkdir命令来创建目录,如: mkdir testdir 表示创建名为testdir的目录。 6. 如何删除文件? 可以使用rm命令来删除文件,如: rm test.txt 表示删除名为test.txt的文件。 7. 如何查找文件? 可以使用find命令来查找文件,如: find /home/user -name test.txt 表示在/home/user目录下查找名为test.txt的文件。 8. 如何在文件中搜索指定字符串? 可以使用grep命令来在文件中搜索指定字符串,如: grep "hello" test.txt 表示在test.txt文件中搜索包含字符串“hello”的行。 9. 如何使用sed命令替换文件中指定字符串? 可以使用sed命令来替换文件中指定字符串,如: sed 's/hello/world/' test.txt 表示将test.txt文件中所有的“hello”替换为“world”。 10. 如何使用awk命令对文件进行处理? 可以使用awk命令对文件进行处理,如: awk '{print $1,$3}' test.txt 表示输出test.txt文件中每行第一列和第三列的内容。 以上就是常见的shell面试题及答案,希望对于准备从事Linux运维或开发工作的朋友们有所帮助。同时还需要注意的是,除了掌握shell基础知识外,也需要具备系统、网络、编程等方面的知识和经验,才能够在企业中脱颖而出。 ### 回答3: Shell是一种命令语言和程序设计语言,用于控制操作系统及其应用程序。Shell被广泛用于Unix和Linux操作系统中,作为用户与操作系统交互的工具。Shell的优点是简单易学、灵活运用和快速调试,因此成为了运维人员不可或缺的技能之一。下面对几个常见的Shell面试题及答案进行介绍。 一、什么是ShellShell是一种命令语言和程序设计语言,它是一种可以理解用户请求并将其转换为操作系统内核所需要执行的命令的程序。 二、什么是Shell脚本Shell脚本是一种编写Shell程序的方法,它是一种用Shell语言编写的程序,可将一系列的Shell命令组织起来实现一定的功能。 三、如何定义一个Shell函数? 定义一个函数的方法如下所示: ``` 函数名() { 命令1; 命令2; ... } ``` 其中,函数名可以任意定义,函数体中可包含多个命令。 四、如何判断一个文件是否存在? 使用if语句可以实现对文件是否存在的判断,代码如下: ``` if [ -e "文件名" ] then 命令1; else 命令2; fi ``` 其中,-e表示文件是否存在的参数,如果文件存在,则执行命令1,否则执行命令2。 五、如何遍历一个目录下所有的文件及子目录? 使用for循环语句可以遍历一个目录下所有的文件及子目录,代码如下: ``` for file in `ls 目录名` do 命令1; done ``` 其中,ls用于列出目录下的所有文件名,for循环语句遍历每一个文件进行相应的操作。 六、如何实现两个字符串的比较? 使用if语句可以实现两个字符串的比较,代码如下: ``` if [ 字符串1 = 字符串2 ] then 命令1; else 命令2; fi ``` 其中,=表示比较两个字符串是否相等,如果相等,则执行命令1,否则执行命令2。 七、如何实现输入输出重定向? 使用重定向符号可以实现输入输出重定向,如下所示: ``` 命令 < 输入文件 > 输出文件 ``` 其中,<表示输入重定向,>表示输出重定向。 八、如何实现后台运行? 使用&运算符可以实现后台运行,如下所示: ``` 命令 & ``` 其中,&表示在后台运行该命令。 以上是Shell面试题及答案的简要介绍。在面试过程中,还需要具备一定的实际操作能力,熟练掌握Shell编程中的语法、操作符、变量、数组、函数等知识点,才能更好地应对面试题并达到求职的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值