70 个 Shell 脚本面试问题和答案

2023-05-16

我们为您的面试准备选择了预期的 70 个 shell 脚本问题和答案。对于所有系统管理员来说,了解脚本或至少基础知识真的很重要,这反过来有助于在您的工作环境中自动执行许多任务。在过去的几年里,我们已经看到所有的 linux 工作规范都需要脚本技能。

1)如何将参数传递给脚本?

./脚本参数

示例:脚本将显示文件名

./show.sh file1.txt

cat show.sh

#!/bin/bash

cat $1

2)如何在脚本中使用参数?

第一个参数:$1,
第二个参数:$2

示例:脚本将文件 (arg1) 复制到目标 (arg2)

./copy.sh file1.txt /tmp/

cat copy.sh

#!/bin/bash

cp $1 $2

3)如何计算传递参数的数量?

$#

4)如何在脚本中获取脚本名称?

$0

5)如何检查之前的命令是否运行成功?

$?

6)如何从文件中获取最后一行?

tail -1

7)如何从文件中获取第一行?

head -1

8)如何从文件的每一行中获取第三个元素?

awk '{print $3}'

9)如果第一个等于 FIND,如何从文件的每一行中获取第二个元素

awk '{ if ($1 == "FIND") print $2}'

10) 如何调试 bash 脚本

将 -xv 添加到 #!/bin/bash

例子

#!/bin/bash –xv

11)举个例子如何编写函数?

function example {
echo "Hello world!"
}

12)如何将字符串添加到字符串?

V1="Hello"
V2="World"
V3=$V1+$V2
echo $V3

输出

Hello+World

13)如何将两个整数相加?

V1=1
V2=2
let V3=$V1+$V2
echo $V3

输出
3

Remember you need to add "let" to line V3=$V1+$V2

then echo $V3 will give 3

if without let , then it will be

echo $V3 will give 1+2

14)如何检查文件系统上是否存在文件?

if [ -f /var/log/messages ]
then
echo "File exists"
fi

15)写下 shell 脚本中所有循环的语法?

循环:

for i in $( ls ); do
echo item: $i
done

while 循环:

#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER+1
done

直到循环:

#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done

16)每个脚本开头的#!/bin/sh 或#!/bin/bash 是什么意思?

该行告诉使用哪个 shell。#!/bin/bash 使用 /bin/bash 执行的脚本。如果是 python 脚本,会有 #!/usr/bin/python

17)如何从文本文件中获取第 10 行?

head -10 file|tail -1

18) bash 脚本文件中的第一个符号是什么

#

19)命令的输出是什么: [ -z "" ] && echo 0 || 回声 1

0

20)什么命令“export”?

在子shell中公开变量

21)如何在后台运行脚本?

在脚本末尾添加“&”

22) “chmod 500 脚本”是做什么的?

使脚本所有者可以执行脚本

23) “>”做什么?

将输出流重定向到文件或另一个流。

24) & 和 && 有什么区别

& - 当我们想要将脚本放到后台时使用它
&& - 当我们想要执行命令/脚本时,如果第一个脚本成功完成

25)当我们在 [条件] 之前需要 "if" 时?

如果条件满足,我们需要运行多个命令。

26)命令的输出是什么:name=John && echo 'My name is $name'

My name is $name

27) bash shell 脚本中用于注释的符号是什么?

#

28)命令的输出是什么: echo ${new:-variable}

variable

29) ' 和 " 引号之间有什么区别?

' - 我们在不想将变量评估为值时使用它
" - 将评估所有变量并分配其值。

30)如何将 stdout 和 stderr 流从脚本内部重定向到 log.txt 文件?

添加“exec >log.txt 2>&1”作为脚本中的第一个命令

31)如何仅使用 echo 命令获取部分字符串变量?

echo ${variable:x:y}
x - 起始位置
y - 长度
示例:
variable="我的名字是 Petras,我是开发人员。"
echo ${variable:11:6} # 将显示 Petras

32)仅当字符串变量=“User:123:321:/home/dir”给出时,如何使用echo 命令获取home_dir?

echo ${variable#*:*:*:}

echo ${variable##*:}

33)如何从上面的字符串中获取“用户”?

echo ${variable%:*:*:*}

echo ${variable%%:*}

34)如何列出 UID 小于 100 (awk) 的用户?

awk -F: '$3<100' /etc/passwd

35)编写程序,为用户计算唯一的主要组并仅显示计数和组名

cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c g
do
{ echo $c; grep :$g: /etc/group|cut -d: -f1;}|xargs -n 2
done

36)如何在 bash shell 中将标准字段分隔符更改为“:”?

IFS=“:”

37)如何获得可变长度?

${#variable}

38)如何打印变量的最后 5 个字符?

echo ${variable: -5}

39) ${variable:-10} 和 ${variable: -10} 有什么区别?

${variable:-10} - 如果在 ${variable: -10} 之前没有分配变量,则给出 10 ,如果赋值则输出该变量。
${variable:  -10}- 给出变量的最后 10 个符号

40)如何仅用 echo 命令替换部分字符串?

echo ${变量//模式/替换}

41)哪个命令将字符串替换为大写?

tr '[:lower:]' '[:upper:]'

42)如何计算本地账户?

wc -l /etc/passwd|cut -d" " -f1

cat /etc/passwd|wc -l

43)如何在没有 wc 命令的情况下计算字符串中的单词?

set ${string}
echo $#

44)哪个是正确的“export $variable”或“export variable”?

export variable

45)如何列出第二个字母为 a 或 b 的文件?

ls -d ?[ab]*

46)如何将整数 a 添加到 b 并分配给 c ?

c=$((a+b))

c=`expr $a + $b`

c=`echo "$a+$b"|bc`

47)如何从字符串中删除所有空格?

echo $string|tr -d " "

48)重写命令打印句子并将变量转换为复数:item="car";回声“我喜欢$item”?

item="car"; echo "I like ${item}s"

49)编写将打印从 0 到 100 的数字并每隔三分之一显示一次 (0 3 6 9 ...) 的命令?

for i in {0..100..3}; do echo $i; done
or
for (( i=0; i<=100; i=i+3 )); do echo "Welcome $i times"; done

50)如何打印提供给脚本的所有参数?

echo $*
or
echo $@

51) [ $a == $b ] 和 [ $a -eq $b ] 有什么区别

[ $a == $b ] - 应该用于字符串比较
[ $a -eq $b ] - 应该用于数字测试

52) = 和 == 之间有什么区别

= - 我们用来给变量赋值
== - 我们用来比较字符串

53)编写命令来测试 $a 是否大于 12 ?

[$a-gt 12]

54)编写命令来测试 $b 是否等于 12 ?

[ $b -le 12 ]

55)如何检查字符串是否以“abc”字母开头?

[[ $string == abc* ]]

56) [[ $string == abc* ]] 和 [[ $string == "abc*" ]] 有什么区别

[[ $string == abc* ]] - 将检查字符串是否以 abc 字母开头
[[ $string == "abc*" ]] - 将检查字符串是否完全等于 abc*

57)如何列出以 ab 或 xy 开头的用户名?

egrep "^ab|^xy" /etc/passwd|cut -d: -f1

58)什么$!意味着在 bash 中?

最近的后台命令 PID

59)什么$??

最近的前台退出状态。

60)如何打印当前shell的PID?

echo $$

61)如何获取传递给脚本的参数数量?

echo $#

62) $* 和 $@ 有什么区别

$* - 以一个字符串形式输出所有传递到脚本的参数
$@ - 以 $IFS 为分隔符列出所有传递到脚本中的参数
63)如何在 bash 中定义数组?

array=("Hi" "my" "name" "is")

64)如何打印第一个数组元素?

echo ${array[0]}

65)如何打印所有数组元素?

echo ${array[@]}

66)如何打印所有数组索引?

echo ${!array[@]}

67)如何删除 id 为 2 的数组元素?

unset array[2]

68)如何添加 id 为 333 的新数组元素?

array[333]="New_element"

69) shell 脚本如何获取输入值?

a) 通过参数

./script param1 param2

b) 通过读命令

read -p "Destination backup Server : " desthost

70)我们如何在脚本中使用“expect”命令?

/usr/bin/expect << EOD
spawn rsync -ar ${line} ${desthost}:${destpath}
expect "*?assword:*"
send "${password}\r"
expect eof
EOD

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

70 个 Shell 脚本面试问题和答案 的相关文章

  • shell脚本“x$VARIABLE”中x的用途[重复]

    这个问题在这里已经有答案了 我正在查看一些 shell 脚本 comarison shcu 中 x 的用途是什么 if x USER x RUN AS USER then su RUN AS USER c CATALINA HOME bin
  • Bash 脚本 - 迭代 find 的输出

    我有一个 bash 脚本 其中需要迭代 find 命令输出的每一行 但似乎我正在迭代 find 命令中的每个单词 以空格分隔 到目前为止我的脚本看起来像这样 folders find maxdepth 1 type d for i in f
  • 在 shell 脚本中连接命令字符串

    我正在维护一个现有的 shell 脚本 它将命令分配给 shell 脚本中的变量 例如 MY COMMAND bin command dosomething 然后接下来 它通过执行以下操作将 参数 传递给 MY COMMAND MY ARG
  • 如何将命令作为参数传递给 ssh [重复]

    这个问题在这里已经有答案了 我的需要是让这个命令起作用 sshpass p XXXX ssh oStrictHostKeyChecking no email protected cdn cgi l email protection sudo
  • Bash 方法的返回值总是模 256

    我有一个 bash 脚本方法 它返回输入值 然而 返回值始终是模 256 的值 我用 google 搜索了一段时间 发现this http www tldp org LDP abs html exitcodes html文章说它总是以 25
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • 如何在lua中获取shell脚本的返回码?

    我正在lua中执行一个脚本 os execute sh manager scripts update system sh f 我想获得脚本的输出 如果退出状态为 7 则返回 7 I tried local output os execute
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 使用 find - 删除除任何一个之外的所有文件/目录(在 Linux 中)

    如果我们想删除我们使用的所有文件和目录 rm rf 但是 如果我希望一次性删除除一个特定文件之外的所有文件和目录怎么办 有什么命令可以做到这一点吗 rm rf 可以轻松地一次性删除 甚至可以删除我最喜欢的文件 目录 提前致谢 find ht
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • 如何在 Linux shell 中将十六进制转换为 ASCII 字符?

    假设我有一个字符串5a 这是 ASCII 字母的十六进制表示Z 我需要找到一个 Linux shell 命令 它将接受一个十六进制字符串并输出该十六进制字符串代表的 ASCII 字符 所以如果我这样做 echo 5a command im
  • 如何从 Artifactory 存储库下载最新的工件?

    我需要来自存储库的最新工件 例如快照 人工工厂 http en wikipedia org wiki Software repository Repository managers 该工件需要通过脚本复制到服务器 Linux 我有什么选择
  • 在 bash 脚本中提取 XML 值 [重复]

    这个问题在这里已经有答案了 我正在尝试从 xml 文档中提取一个值 该文档已作为变量读入我的脚本中 原始变量 data is
  • 使用 awk 读取文件并搜索另一个文件

    我正在读取一个文件 每行都有数字 我需要搜索另一个满足这些数字和其他条件的文件 我正在尝试使用 awk 来做到这一点 但遇到了问题 File a txt 1476 1477 1497 现在我需要打印第 12 列包含这些数字的行以及第 3 列
  • 从 UNIX 命令行向串行端口发送字节?

    我想使用命令行将字节流发送到串行端口 这可能吗 我的串口位于 dev cu usbserial A700dYoR在我的 Mac 上 例如 如果我想将整数 50 或字符串 data 发送到该串行端口 我该怎么做 我对 UNIX 的了解非常有限
  • 如何从我自己的脚本向 Fish shell 提供制表符补全?

    我运行的是 Ubuntu 13 10 和 Fish 2 1 0 我想自己编写一个 Python 脚本来从命令行执行一些任务 该脚本将需要命令行参数 我怎样才能编写我的脚本 以便 Fish 可以请求并获取给定参数的可能值 潜在值列表是动态的
  • 如何在 PHP 中运行 shell 脚本?

    我正在尝试使用 PHP 触发 shell 脚本的运行 本质上 当用户在我们用 PHP 编写的网站上完成一个操作时 我们希望触发一个 shell 脚本 该脚本本身调用一个 Java 文件 提前致谢 See shell exec http ph

随机推荐

  • CUJ:标准库:定义iterator和const iterator

    The Standard Librarian Defining Iterators and Const Iterators Matt Austern http www cuj com experts 1901 austern htm top
  • CUJ:高效使用标准库:显式函数模板参数申明与STL

    Effective Standard C 43 43 Library Explicit Function Template Argument Specification and STL A New Language Feature and
  • 正则是如何判断有重复/由不重复的数字组成的串的。

    源自这里 xff1a http bbs csdn net topics 390804087 d 1 这个判断了有重复的数字 原理 xff1a 是非贪婪 xff0c 从最少的数量试起 是0 无穷大次 最小就是0 对于源串 1234567890
  • 《C++程序设计原理与实践》书评

    在2周内 xff0c 以1目10行的速度读过了这本书 小小书评如下 xff1a 这是一本主要面向初学者的极好的教材 在我看过的编程书籍中 xff0c 这是第二本适合于完全无编程经验的初学者的入门书籍 xff08 前面一本叫 C语言解析教程
  • 最近用了一把boost::range,哎,真方便。(水帖)

    难怪有老外大牛写文章 iterator must go 34 stl是该彻底重写了 嗯 xff0c 我的C 43 43 代码越来越向python代码靠拢了
  • 数据库左连接注意点

    left join on 即左连接 xff0c 把left join左边的表的记录全部找出来 进行左连接时 xff0c 就有涉及到主表 辅表 xff0c 这时 主表条件写在 WHERE之后 xff0c 辅表条件写在 ON后面 xff01 x
  • boost::preprocess的神秘魔法的实现细节:BOOST_PP_SEQ_SIZE(SEQ)

    BOOST PP SEQ SIZE还可以展示一下 xff0c BEGIN BOOST PP SEQ FOLD LEFT SUB S 22 SEQ 61 61 10 END直接生产了2 6M的log过程 define SEQ 4 1 5 2
  • windows子系统固定IP和开启ssh

    Windows子系统固定IP地址 一 固定IP地址 windows子系统默认开机会变更随机ip 修改为固定的ip地址 1 获取子系统名 打开cmd或PowerShell输入 wsl l v 显示如图 获得Ubuntu在子系统中名字 Ubun
  • Centos 安装pyspider 必须成功

    Centos安装pyspider踩过的坑 xff01 xff01 xff01 一个接着一个 写在前面的话 xff1a 一直在本地机器小玩玩pyspider xff0c 今天心血来潮linux安排上 网上教程一大堆 xff0c 一个接着一个坑
  • Permutation Test

    常规步骤 xff1a 一般 多组间样本均数的比较是先做正态性检验和方差齐性 xff0c 然后在各组 都满足 正态性和方差齐性的前提下做方差分析 如果数据呈现正态分布 xff0c 但方差不齐 xff0c 则可以选择近似方法 Welch法 和
  • [vuejs] 在vuejs中使用websocket进行实时通讯

    在vuejs框架中使用websocket 可以比较方便的运用到vuejs框架的响应式系统 以及一些简单的生命周期函数 var app 61 new Vue el 39 app 39 data server 34 ws 127 0 0 1 8
  • [nginx] X-Cache: HIT的意思

    请求返回的数据是从缓存里拿到的X Cache HIT 缓存命中了 遇到一个返回接口数据总是不对 xff0c 在看到X Cache HIT才发现 给接口设置了缓存 xff01 xff01 xff01
  • [CSS] CSS display:flex实现内容水平垂直居中展示

    display flex实现内容水平垂直居中展示 需要增加下面两点就能实现 首先父级元素必须有高度 xff0c 没有高度就无法垂直居中 xff0c 如果想全屏垂直居中 xff0c 可以设置高度为100vh 比如body设置为这样 body
  • Java在字符串中查找匹配的子字符串

    示例 xff1a 在源字符串 You may be out of my sight but never out of my mind 中查找 my 的个数 输出 xff1a 匹配个数为2 三种方法 xff1a 1 通过String的inde
  • Ext4 vs XFS——你应该使用哪个文件系统

    运行 Linux 系统的用户几乎不会关注底层文件系统 事实上 xff0c 在安装 Linux 的过程中 xff0c 通常倾向于使用列出的默认文件系统而不探索其他可用选项 对于 Windows xff0c 事情要容易得多 xff0c 因为 N
  • Btrfs 与 Ext4 - 功能、优势和劣势

    文件系统控制从存储设备存储和检索数据的位置 方式和时间 日常系统进程需要一个高效的文件系统 Linux 内核支持多种文件系统 最常用的是 Ext4 Btrfs XFS 和 ZFS xff0c 这是 2018 年发布的最新文件系统 这些文件系
  • Extjs6 Tree 树数据筛选

    前端使用ExtJS6 xff0c 要求在菜单树上对菜单树的数据进行筛选 xff0c 提高用户的体验 现在功能已经完成 xff0c 这里记录下来便于后面遇到类似问题作为参考 xff0c 会贴上源码和官方Demo提供参考的源码 对Tree的筛选
  • apt update和apt upgrade命令 - 有什么区别?

    在之前的文章中 xff0c 我们查看了APT 命令以及您可以使用包管理器来管理包的各种方法 这是一个总体概述 xff0c 但在本指南中 xff0c 我们暂停并重点关注 2 个命令用法 这些是apt update和apt upgrade命令
  • 48 个 Linux 面试问题和答案

    你在准备 Linux 面试吗 xff1f 我们准备了一些常见的 Linux 面试问题及其答案 如果您是初学者 xff08 具有一定的 Linux 知识或获得认证 xff09 或具有专业的 Linux 管理经验 xff0c 那么下面的问答有助
  • 70 个 Shell 脚本面试问题和答案

    我们为您的面试准备选择了预期的 70 个 shell 脚本问题和答案 对于所有系统管理员来说 xff0c 了解脚本或至少基础知识真的很重要 xff0c 这反过来有助于在您的工作环境中自动执行许多任务 在过去的几年里 xff0c 我们已经看到