Linux Shell脚本面试问题大全

幸运
185
文章
0
评论
三月 15, 202003:13:36 评论 126 4324字阅读14分24秒
人们给你的面试技巧挑选了 70 个你将会碰到的 shell 脚本制作面试问题及解释。掌握脚本制作或最少了解基本知识对计算机管理员而言尤为重要,它也有利于你一直在办公环境中全自动进行许多 每日任务。过去的两年里,人们留意到所有的 Linux 工作职位都要求脚本技能。

1) 如何向脚本传递参数 ?

  1. ./script argument

例子 : 显示文件名称脚本

  1. ./show.sh file1.txt
  2. cat show.sh
  3. #!/bin/bash
  4. cat $1

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

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

例子 : 脚本会复制文件(arg1) 到目标地址(arg2)

  1. ./copy.sh file1.txt /tmp/
  2. cat copy.sh
  3. #!/bin/bash
  4. cp $1 $2

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

  1. $#

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

  1. $0

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

  1. $?

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

  1. tail -1

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

  1. head -1

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

  1. awk '{print $3}'

9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素

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

10) 如何调试 bash 脚本

将 -xv 参数加到 #!/bin/bash 后

例子:

  1. #!/bin/bash –xv

11) 举例如何写一个函数 ?

  1. function example {
  2. echo "Hello world!"
  3. }

12) 如何向连接两个字符串 ?

  1. V1="Hello"
  2. V2="World"
  3. V3=${V1}${V2}
  4. echo $V3

输出

  1. HelloWorld

据匿名网友评论,本题原答案有误,已经修正。

13) 如何进行两个整数相加 ?

  1. V1=1
  2. V2=2
  3. let V3=$V1+$V2
  4. echo $V3

输出

  1. 3

据 @kashu 的意见,本题的更佳回答为:

两个整数相加,还有若干种方法实现:

  1. A=5
  2. B=6
  3. echo $(($A+$B)) # 方法 2
  4. echo $[$A+$B] # 方法 3
  5. expr $A + $B # 方法 4
  6. echo $A+$B | bc # 方法 5
  7. awk 'BEGIN{print '"$A"'+'"$B"'}' # 方法 6

14) 如何检查文件系统中是否存在某个文件 ?

  1. if [ -f /var/log/messages ]
  2. then
  3. echo "File exists"
  4. fi

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

for 循环:

  1. for i in $( ls ); do
  2. echo item: $i
  3. done

while 循环:

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

until 循环:

  1. #!/bin/bash
  2. COUNTER=20
  3. until [ $COUNTER -lt 10 ]; do
  4. echo COUNTER $COUNTER
  5. let COUNTER-=1
  6. done

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

这一行说明要使用的 shell。#!/bin/bash 表示脚本使用 /bin/bash

对于 python 脚本,就是 #!/usr/bin/python。(LCTT译注:这一行称之为释伴行。)

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

  1. head -10 file|tail -1

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

  1. #

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

  1. 0

20) 命令 “export” 有什么用 ?

使变量在子 shell 中可用。

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

在脚本后面添加 “&”。

据 @kashu 的意见,更好的答案是:

  1. nohup command &

大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &没了...

22) "chmod 500 script" 做什么 ?

使脚本所有者拥有可执行权限。

23) ">" 做什么 ?

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

24) & 和 && 有什么区别

●& - 希望脚本在后台运行的时候使用它

●&& - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

25) 什么时候要在 [ condition ] 之前使用 “if” ?

当条件满足时需要运行多条命令的时候。

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

  1. My name is $name

27) bash shell 脚本中哪个符号用于注释 ?

  1. #

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

  1. variable

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

●' - 当我们不希望把变量转换为值的时候使用它。

●" - 会计算所有变量的值并用值代替。

30) 如何在脚本文件中重定向标准输出和标准错误流到 log.txt 文件 ?

在脚本文件中添加 "exec >log.txt 2>&1" 命令。

31) 如何只用 echo 命令获取字符串变量的一部分 ?

  1. echo ${variable:x:y}
  2. x - 起始位置
  3. y - 长度

例子:

  1. variable="My name is Petras, and I am developer."
  2. echo ${variable:11:6} # 会显示 Petras

32) 如果给定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令获取 home_dir ?

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

  1. echo ${variable##*:}

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

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

  1. echo ${variable%%:*}

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

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

35) 写程序为用户计算主组数目并显示次数和组名

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

36) 如何在 bash shell 中更改标准的域分隔符为 ":" ?

  1. IFS=":"

37) 如何获取变量长度 ?

  1. ${#variable}

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

  1. echo ${variable: -5}

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

●${variable:-10} - 如果之前没有给 variable 赋值则输出 10;如果有赋值则输出该变量

●${variable: -10} - 输出 variable 的最后 10 个字符

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

  1. echo ${variable//pattern/replacement}

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

  1. tr '[:lower:]' '[:upper:]'

42) 如何计算本地用户数目 ?

wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -l

43) 不用 wc 命令如何计算字符串中的单词数目 ?

  1. set ${string}
  2. echo $#

44) "export $variable" 或 "export variable" 哪个正确 ?

  1. export variable

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

  1. ls -d ?[ab]*

46) 如何将整数 a 加到 b 并赋值给 c ?

  1. c=$((a+b))

  1. c=`expr $a + $b`

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

47) 如何去除字符串中的所有空格 ?

  1. echo $string|tr -d " "

48) 重写这个命令,将输出变量转换为复数: item="car"; echo "I like $item" ?

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

49) 写出输出数字 0 到 100 中 3 的倍数(0 3 6 9 …)的命令 ?

  1. for i in {0..100..3}; do echo $i; done

  1. for (( i=0; i<=100; i=i+3 )); do echo "Welcome $i times"; done

50) 如何打印传递给脚本的所有参数 ?

  1. echo $*

  1. echo [email protected]

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

●[ $a == $b ] - 用于字符串比较

●[ $a -eq $b ] - 用于数字比较

52) = 和 == 有什么区别

●= - 用于为变量赋值

●== - 用于字符串比较

53) 写出测试 $a 是否大于 12 的命令 ?

  1. [ $a -gt 12 ]

54) 写出测试 $b 是否小于等于 12 的命令 ?

  1. [ $b -le 12 ]

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

  1. [[ $string == abc* ]]

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

●[[ $string == abc* ]] - 检查字符串是否以字母 abc 开头

●[[ $string == "abc" ]] - 检查字符串是否完全等于 abc

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

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

58) bash 中 $! 表示什么意思 ?

后台最近执行命令的 PID.

59) $? 表示什么意思 ?

前台最近命令的结束状态。

60) 如何输出当前 shell 的 PID ?

  1. echo $

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

  1. echo $#

(LCTT 译注:和第3题重复了。)

62) $* 和 [email protected] 有什么区别

●$* - 以一个字符串形式输出所有传递到脚本的参数

[email protected] - 以 $IFS 为分隔符列出所有传递到脚本中的参数

63) 如何在 bash 中定义数组 ?

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

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

  1. echo ${array[0]}

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

  1. echo ${array[@]}

66) 如何输出所有数组索引 ?

  1. echo ${!array[@]}

67) 如何移除数组中索引为 2 的元素 ?

  1. unset array[2]

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

  1. array[333]="New_element"

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

a) 通过参数

  1. ./script param1 param2

b) 通过 read 命令

  1. read -p "Destination backup Server : " desthost

70) 在脚本中如何使用 "expect" ?

  1. /usr/bin/expect << EOD
  2. spawn rsync -ar ${line} ${desthost}:${destpath}
  3. expect "*?assword:*"
  4. send "${password}r"
  5. expect eof
  6. EOD

祝你好运 !!

本文来源于:Linux Shell脚本面试问题大全-幸运草博客
特别声明:以上文章内容仅代表作者本人观点,不代表幸运草博客观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与幸运草联系。

  • 本站QQ群
  • weinxin
  • 捐赠本站
  • weinxin
Linux 启动过程分析 Linux

Linux 启动过程分析

关于开源软件最古老的笑话是:“代码是自具文档化的self-documenting”。经验表明,阅读源代码就像听天气预报一样:明智的人依然出门会看看室外的天气。本文讲述了如何运用调试工具来观察和分析 L...
Linux 系统调用的初学者指南 Linux

Linux 系统调用的初学者指南

在过去的几年中,我一直在做大量容器相关的工作。先前,我看到 Julien Friedman 的一个很棒的演讲,它用几行 Go 语言写了一个容器框架。这让我突然了解到容器只是一个受限的 Linux 进程...
Linux “完全统治” 了超级计算机 Linux

Linux “完全统治” 了超级计算机

Linux 统治了超级计算。自 1998 年以来,这一天终于到来了,那时候 Linux 首次出现在 TOP 500 超级计算机榜单上。如今,全世界最快的 500 台超级计算机全部运行着 Linux! ...
Linux Deepin :一个拥有独特风格的发行版 Linux

Linux Deepin :一个拥有独特风格的发行版

  这是本系列的第六篇 Linux Deepin。这个发行版真的是非常有意思,它有着许多吸引眼球的地方。许许多多的发行版,它们仅仅将已有的应用放入它的应用市场中,使得它们的应用市场十分冷清。但是 De...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: