我们为您的面试准备选择了预期的 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 - 给出
变量的最后 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

70 个 Shell 脚本面试问题和答案相关推荐

  1. 70个经典的 Shell 脚本面试问题

    转载自:http://www.imooc.com/article/1131 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1. ...

  2. 70个经典的 Shell 脚本

    参考: 阿里Linux Shell脚本面试25个经典问答 分享70个经典的 Shell 脚本面试题与答案 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ? ...

  3. c中获取python控制台输出_linux c程序中获取shell脚本输出的实现方法

    [转]Linux Shell脚本调试技术 本文转载自:https://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ Shell脚本调试技术 ...

  4. shell for循环命令行_精心汇总的24道shell脚本面试题

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

  5. shell for循环命令行_24 道 shell 脚本面试题

    想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么. ...

  6. linux脚本简介,Linux Shell脚本简介

    Shell 诞生于 Unix,是与 Unix/Linux 交互的工具,单独地学习 Shell 是没有意义的,请先参考Unix/Linux入门教程,了解 Unix/Lunix 基础. 近几年来,Shel ...

  7. linux连接oracle的日志,linux shell脚本连接oracle查询数据插入文件和日志文件中

    #!/bin/sh sqlplus "用户名/密码@数据库"< sqlplus "用户名/密码"< sqlplus -S "用户名/密码& ...

  8. shell 脚本练习 | 「题霸」面试必考真题【shell篇】题解

    写在前面: 每道shell脚本练习题都可以使用while.for.do等循环配合read,printf的方式解题,通过这种编程式的思维解题(类似C语言,通过变量与函数解题).而shell中本身就提供了 ...

  9. Linux Shell脚本的10个有用的“面试问题和解答”

    首先致上每日问候.Linux的浩瀚无垠,使人总能每次都提交与众不同的内容.我们"The-Tecmint-Team"的工作是给我们的读者提供一些独特的内容,这些内容不仅对他们的职业生 ...

最新文章

  1. c++ opencv mat 最大值,数据类型
  2. Java后台解析前台的get中文请求
  3. 贼好用的 Java 工具类库,GitHub 星标 10k+,你在用吗?
  4. java mouselistener,Java MouseListener接口
  5. java 按回车键查询
  6. Linux知识体系之路径属性与目录
  7. java分页的方法_java实现的分页方法(上一页下一页)
  8. 微信小程序如何快速累计独立访客(UV)不低于 1000
  9. 算法竞赛命题指南(命题流程、Polygon的使用等)
  10. 文件名字超出计算机无法删除,电脑文件名太长无法删除怎么办
  11. Tomat报错 The APR based Apache Tomcat Native library which allows optimal performance in production
  12. 阿里巴巴在知乎上又出事了
  13. print spooler打印服务启动后,自动停止的解决方法。
  14. 2022-2028全球踏步机测力计行业调研及趋势分析报告
  15. 【技术知识】SVAC 2.0安全技术浅析
  16. 新鲜的蔬菜和水果中富含抗氧化物,可以有效延缓衰老和疾病
  17. xmodem,ymodem,zmodem,kermit的主要区别
  18. 如何获取系统当前时间
  19. 多种乡村体验游盈利方式,助你撬动上千亿乡村旅游市场!
  20. [知乎]关于WindowsXPx64SP2系统的说明

热门文章

  1. 分享一个超大文件编辑器(WINDOWS 文本编辑器)
  2. 【Java】Java编译时错误:A JNI error has occurred, please check your installation and try again
  3. IPFS云服务器预售登录系统,ipfs 云服务器
  4. 华为云发布实时音视频行业加速器,为企业解决技术与商业双重难题
  5. Word中令人头疼的字体转换
  6. Fuchsia OS 将推送给所有第一代 Nest Hub 设备
  7. 精准DNA甲基化/羟甲基化测序(oxBS-seq)|易基因技术推介
  8. Android——扩大ImageButton的点击区域
  9. where 引导从句
  10. 《高考前夕时间旅行的可行性研究报告》