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

以下是 Shell 脚本面试问题和答案,可以帮助新手和有经验的应聘者获得理想的工作。

 

Linux Shell 脚本面试问题及答案

1)什么是shell?

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

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


2)什么是 Shell 脚本?

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

Shell 脚本面试问题


3) 典型的 Linux 系统上常用的 shell 有哪些不同类型?

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


4)我们在Linux系统上有一个窗口的文件快捷方式相当于什么?

在 Linux 上,快捷方式是通过“链接”创建的。可以使用两种类型的链接,即“软链接”和“硬链接”。


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

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


6) 如何在 Linux 中传递和访问脚本的参数?

参数可以传递如下:

scriptName “Arg1” “Arg2″….”Argn”,可以在脚本内部以 $1、$2 .. $n 的形式访问


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

$@ 将每个引用的参数视为单独的参数,但 $* 会将整个位置参数集视为单个字符串。


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

例如:

if cat fille
ABCD
EFGH

那么 O/p 应该是

生长激素
A B C D

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

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

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

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


9)给定一个文件,从 5 开始,将所有出现的单词“ABC”替换为“DEF”th 仅在包含单词“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)你如何找到99th 仅使用 tail 和 head 命令的文件行?

尾部 +99 文件1|头 -1


12)打印 10th 无需使用 tail 和 head 命令即可。

sed –n '10p' file1

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

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

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

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


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

“s”位称为“设置用户ID”(SUID)位。

文件上的“s”位使得进程在程序实例期间拥有文件所有者的权限。

例如,执行“passwd”命令来更改当前密码会导致用户将其新密码写入影子文件,即使该文件的所有者是“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 主机名

>放置文件1

>再见

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


面向经验丰富的 Shell 脚本面试问题及答案

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

我们可以使用 tail –f filename。这将导致在 std o/p 上仅显示默认的最后 10 行,从而持续显示文件的更新部分。


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

我们可以使用 ssh 来做到这一点:

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

例如:

ssh root@122.52.251.171 -p 22

执行上述命令后,系统会要求你输入密码


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

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

comm -12 file1 file2 … 12 将隐藏以下内容

1 独有st 4th 和5th 轴车削中心nd 分别存档。


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 连接到数据库服务器?

我们可以使用开放客户端驱动程序附带的 isql 实用程序,如下所示:

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


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

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


27) 我想从文件 1 读取命令的所有输入,将所有输出直接发送到文件 2,并将错误发送到文件 3,如何实现?

命令文件1 1>文件2


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

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

例如,执行 "exec ls" 在命令提示符下将执行 ls,一旦 ls 退出,该进程将关闭


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

awk 'END {print NR} fileName'


30) 给定一个文件,找出包含单词“ABC”的行数。

grep –c “ABC” 文件1


31)grep 和 egrep 有什么区别?

egrep 是扩展的 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”th 文件的行?

sed'100i\ABCDEF'文件1


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

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


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

我们可以用:

umask 777

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


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

我们可以使用 "ps –p ProcessId"


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

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


43)什么是引导块?

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


44)什么是超级块?

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


45)什么是 inode 块?

该块包含文件系统中每个文件的 inode 以及除文件名称之外的所有文件属性。


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

zip file1.zip file1|mailx –s “主题” 收件人电子邮件 ID

邮件内容

EOF


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

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


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

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


49)shebang line 有什么用?

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

这些面试问题也会对你的口试有帮助