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

我们为您的面试准备选择了预期的 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

猜你喜欢

转载自blog.csdn.net/taoxicun/article/details/122922093