50 个 Shell 脚本编写面试题及答案 (2025)

以下是为初学者和有经验的候选人准备的 Shell Scripting 面试问题及答案,助您获得梦想工作。

 

Linux Shell Scripting 面试问题及答案

1) Shell 是什么?

Shell 是用户与内核之间的接口。尽管系统只能有一个内核;但一个系统可以同时运行许多 shell。因此,每当用户通过键盘输入命令时,shell 会与内核通信以执行它,然后将输出显示给用户。

👉 免费 PDF 下载:Shell Scripting 面试问题与答案


2) 什么是 Shell Scripting?

Shell Scripting 是一个开源计算机程序,旨在由 Unix/Linux shell 运行。Shell Scripting 是为 shell 编写一系列命令以执行的程序。它可以将冗长且重复的命令序列组合成一个简单易懂的脚本,该脚本可以随时存储和执行,从而减少编程工作量。

Shell Scripting Interview Questions


3) 在典型的 Linux 系统上,最常用的 shell 有哪些?

csh、ksh、bash、Bourne。目前最常用和最先进的 shell 是“Bash”。


4) 在 Linux 系统上,文件快捷方式相当于 Windows 的什么?

Linux 上使用“链接”创建快捷方式。可以使用两种类型的链接:“软链接”和“硬链接”。


5) 软链接和硬链接有什么区别?

软链接链接到文件名,也可以存在于不同的文件系统;而硬链接链接到文件的 inode,并且必须与文件位于同一个文件系统上。删除原始文件会使软链接失效(断链),但不会影响硬链接(硬链接仍然可以访问文件的副本)。


6) 如何向 Linux 脚本传递和访问参数?

参数可以这样传递:

scriptName “Arg1” “Arg2″….”Argn”,在脚本中可以通过 $1、$2..$n 访问。


7) $* 和 $@ 有什么区别?

$@ 将每个引用的参数视为独立的参数,而 $* 则将所有位置参数视为一个字符串。


8) 使用 sed 命令替换文件内容(模拟 tac 命令)

例如:

if cat fille
ABCD
EFGH

那么输出应该是:

EFGH
ABCD

sed '1! G; h;$!d' file1

这里 G 命令将追加到模式空间,

h 命令将模式缓冲区复制到保持缓冲区

d 命令删除当前模式空间。


9) 给定一个文件,将从第 5 行到末尾的所有“ABC”替换为“DEF”,仅在包含“MNO”的行中进行。

sed –n '5,$p' file1|sed '/MNO/s/ABC/DEF/'

10) 给定一个文件,编写一个命令序列来查找每个单词的计数。

tr –s  "(backslash)040" <file1|tr –s  "(backslash)011"|tr "(backslash)040 (backslash)011" "(backslash)012" |uniq –c
where "(backslash)040" is octal equivalent of "space"

“\011”是“制表符”的八进制等价物,

“\012”是换行符的八进制等价物。


11) 如何仅使用 tail 和 head 命令查找文件的第 99 行?

tail +99 file1|head -1


12) 不使用 tail 和 head 命令打印第 10 行。

sed –n '10p' file1

13) 在我的 bash shell 中,我希望我的提示符格式为“Present working directory”:”hostname”>,并在我登录时加载一个包含用户定义函数列表的文件,如何实现自动化?

在 bash shell 中,我们可以创建一个 “.profile” 文件,该文件会在我登录时自动调用,并将以下语法写入其中。

export PS1='$ `pwd`:`hostname`>' .File1

这里 File1 是包含用户定义函数的 文件,“.” 会在当前 shell 中调用此文件。


14) 解释文件中的“s”权限位?

“s”位被称为“set user id”(SUID)位。

文件上的“s”位会使进程在程序运行时拥有该文件的所有者的权限。

例如,执行“passwd”命令更改当前密码,会使用户能够将其新密码写入 shadow 文件,即使该文件的所有者是“root”。


15) 我想创建一个目录,使得组中的任何人都可以创建文件,并且可以访问组中任何人的文件,但除了自己创建的文件外,任何人都不应该能够删除其他人的文件。

我们可以通过以下方式创建目录,给予组中所有成员读取和执行权限,并设置其粘滞位“t”:

mkdir direc1
 
chmod g+wx direc1
 
chmod +t direc1

16) 如何找出系统运行了多久?

我们可以使用“uptime”命令来查找。


17) 任何用户如何找出特定用户的全部信息,例如他的默认 shell、真实姓名、默认目录、以及他何时以及多长时间使用该系统?

finger “loginName”……其中 loginName 是

用户的登录名,其信息是期望的。


18) $$ 和 $! 有什么区别?

$$ 提供当前正在执行进程的进程 ID,而 $! 显示最近进入后台的进程的进程 ID。


19) 什么是僵尸进程?

这些进程已经死亡,但它们的退出状态仍未被父进程获取。这些进程即使没有功能,在进程表中仍然有其进程 ID 条目。


20) 如何将文件从一台机器复制到另一台?

我们可以使用“ftp”、“scp”或“rsync”等实用程序将文件从一台机器复制到另一台。

例如,使用 ftp

FTP 主机名

> put file1

> bye

以上命令将文件 file1 从本地系统复制到指定了主机名的目标系统。


Shell Scripting 面试问题及答案(面向有经验者)

21) 我想监控一个不断更新的日志文件,可以使用什么命令最有效地实现?

我们可以使用 tail –f filename。这将仅在标准输出上显示默认的最后 10 行,并连续显示文件的更新部分。


22) 我想连接到远程服务器并执行一些命令,如何实现?

我们可以使用 ssh 来实现

ssh 用户名@服务器IP -p ssh端口

示例

ssh root@122.52.251.171 -p 22

执行上述命令后,会要求您输入密码。


23) 我有 2 个文件,我想打印出它们共有的记录。

我们可以如下使用“comm”命令

comm -12 file1 file2 … 12 将抑制分别属于第 1 和第 2 个文件的

唯一内容。


24) 编写一个脚本来打印斐波那契数列的前 10 个元素。

  
#!/bin/sh
a=1
b=1
echo $a
echo $b
for I in 1 2 3 4 5 6 7 8
do
c=a
b=$a
b=$(($a+$c))
echo $b
done

25) 如何从 Linux 连接到数据库服务器?

我们可以使用随 open client 驱动程序提供的 isql 实用程序,如下所示:

isql –S 服务器名 –U 用户名 –P 密码


26) Linux 中的 3 个标准流是什么?

0 – 标准输入 1 – 标准输出 2 – 标准错误


27) 我想将所有输入从 file1 读取到命令,将所有输出重定向到 file2,并将错误重定向到 file 3,如何实现?

command <file1 1>file2 2>file3


28) 当我使用 exec 执行命令时,我的当前进程会发生什么?

“exec”会将新创建的进程覆盖到当前进程上;因此,当我使用 exec 执行命令时,该命令会在当前 shell 上执行,而不会创建新进程。

例如,在命令提示符下执行 “exec ls” 会执行 ls,并且一旦 ls 退出,进程就会关闭。


29) 如何使用 awk 模拟 wc –l?

awk 'END {print NR} fileName'


30) 给定一个文件,查找包含“ABC”的行的计数。

grep –c “ABC” file1


31) grep 和 egrep 有什么区别?

egrep 是 Extended grep,它支持 grep 的附加功能,例如“+”(前一个字符出现 1 次或多次)、“?”(前一个字符出现 0 次或 1 次)和“|”(交替匹配)。


32) 如何在 Linux 中设置数组?

ksh 中的语法

Set –A arrayname= (element1 element2 ….. element)
In bash
A=(element1 element2 element3 …. elementn)

33) 写下“for”循环的语法。

语法

for  iterator in (elements)
do
execute commands
done

34) 如何查找特定用户使用的总磁盘空间?

du -s /home/user1 … 其中 user1 是需要查找总磁盘空间的用户。


35) 写下 Linux 中“if”条件语句的语法?

语法

If  condition is successful
then
execute commands
else
execute commands
fi

36) $? 的意义是什么?

命令 $? 给出了最后执行命令的退出状态。


37) 如何删除文件中的所有空行?

sed  '^ [(backslash)011(backslash)040]*$/d' file1

其中 (反斜杠)011 是空格的八进制等价物,

(反斜杠)040 是制表符的八进制等价物。


38) 如何在文件的每 100 行插入一行“ABCDEF”?

sed ‘100i\ABCDEF’ file1


39) 编写一个命令序列来查找所有在 2 天内修改过的文件,并打印每个文件的记录计数。

find . –mtime -2 –exec wc –l {} \;


40) 如何为当前 shell 中创建的每个文件设置所有用户的默认 rwx 权限?

我们可以使用

umask 777

这将为每个用户创建的每个文件设置默认的 rwx 权限。


41) 如何通过进程 ID 查找进程名称?

我们可以使用 “ps –p 进程ID”


42) Linux 中每个文件系统的四个基本组成部分是什么?

引导块、超级块、inode 块和数据块是 Linux 中每个文件系统的基本组成部分。


43) 什么是引导块?

此块包含一个名为“主引导记录”(MBR) 的小程序,该程序在系统启动期间加载内核。


44) 什么是超级块?

超级块包含有关文件系统的信息,如文件系统的大小、使用的块大小、空闲数据块的数量以及空闲 inode 和数据块的列表。


45) 什么是 inode 块?

此块包含文件系统中每个文件的 inode 以及所有文件属性,但不包括其名称。


46) 如何发送带有压缩文件作为附件的邮件?

zip file1.zip file1|mailx –s “主题” 收件人邮箱地址

邮件内容

EOF


47) 如何在 shell 中创建命令别名?

alias 别名=”要创建别名的命令”。


48) 文件的“c”和“b”权限字段是什么?

“c”和“b”权限字段通常与设备文件相关联。它指定文件是特殊字符文件还是块设备文件。


49) shebang 行的用途是什么?

每个脚本顶部的 shebang 行决定了用于执行脚本的引擎的位置。

这些面试问题也将有助于您的口试