分享70个经典的 Shell 脚本面试题与答案
我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答。了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能。
1) 如何向脚本传递参数 ?
1) 如何向脚本传递参数 ?
./script argument
./script argument
例子: 显示文件名称脚本
例子: 显示文件名称脚本
./show.sh file1.txt
./show.sh file1.txt
cat show.sh
#!/bin/bash
echo $1
cat show.sh
(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。)
#!/bin/bash
2) 如何在脚本中使用参数 ?
echo $1
第一个参数 : $1,第二个参数 : $2
(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。)
例子 : 脚本会复制文件(arg1) 到目标地址(arg2)
2) 如何在脚本中使用参数 ?
./copy.sh file1.txt /tmp/
cat copy.sh
#!/bin/bash
cp $1 $2
第一个参数 : $1,第二个参数 : $2
3) 如何计算传递进来的参数 ?
例子 : 脚本会复制文件(arg1) 到目标地址(arg2)
$#
./copy.sh file1.txt /tmp/cat copy.sh#!/bin/bashcp $1 $2
4) 如何在脚本中获取脚本名称 ?
3) 如何计算传递进来的参数 ?
$0
$#
5) 如何检查之前的命令是否运行成功 ?
4) 如何在脚本中获取脚本名称 ?
$?
$0
6) 如何获取文件的最后一行 ?
5) 如何检查之前的命令是否运行成功 ?
tail-1
$?
7) 如何获取文件的第一行 ?
6) 如何获取文件的最后一行 ?
head-1
tail-1
8) 如何获取一个文件每一行的第三个元素 ?
7) 如何获取文件的第一行 ?
awk'{print $3}'
head-1
9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素
8) 如何获取一个文件每一行的第三个元素 ?
awk'{ if ($1 == "FIND") print $2}'
awk'{print $3}'
10) 如何调试 bash 脚本
9) 假如文件中每行第一个元素是 FIND,如何获取第二个元素
将 -xv
参数加到 #!/bin/bash
后
awk'{ if ($1 == "FIND") print $2}'
例子:
10) 如何调试 bash 脚本
#!/bin/bash –xv
将-xv参数加到#!/bin/bash后
11) 举例如何写一个函数 ?
例子:
function example {
echo "Hello world!"
}
#!/bin/bash –xv
12) 如何向连接两个字符串 ?
11) 举例如何写一个函数 ?
V1="Hello"
V2="World"
V3=${V1}${V2}
echo $V3
functionexample{echo"Hello world!"}
输出
12) 如何向连接两个字符串 ?
HelloWorld
V1="Hello"V2="World"V3=${V1}${V2}echo $V3
13) 如何进行两个整数相加 ?
输出
V1=1
V2=2
let V3=$V1 $V2
echo $V3
HelloWorld
输出
13) 如何进行两个整数相加 ?
3
V1=1V2=2let V3=$V1 $V2
据 @kashu 的意见,本题的更佳回答为:
echo $V3
两个整数相加,还有若干种方法实现:
输出
A=5
B=6
echo $(($A $B)) # 方法 2
echo $[$A $B] # 方法 3
expr $A $B # 方法 4
echo $A $B | bc # 方法 5
awk 'BEGIN{print '"$A"' '"$B"'}' # 方法 6
3
14) 如何检查文件系统中是否存在某个文件 ?
据 @kashu 的意见,本题的更佳回答为:
if [ -f /var/log/messages ]
then
echo "File exists"
fi
两个整数相加,还有若干种方法实现:
15) 写出 shell 脚本中所有循环语法 ?
A=5B=6echo $(($A $B))# 方法 2echo $[$A $B]# 方法 3expr $A $B# 方法 4echo $A $B|bc# 方法 5awk'BEGIN{print '"$A"' '"$B"'}'# 方法 6
for 循环 :
14) 如何检查文件系统中是否存在某个文件 ?
foriin$(ls);do
echo item:$i
done
if[-f/var/log/messages]thenecho"File exists"fi
while 循环 :
15) 写出 shell 脚本中所有循环语法 ?
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 10 ]; do
echo The counter is $COUNTER
let COUNTER=COUNTER 1
done
for 循环 :
until 循环 :
foriin$(ls);doecho item:$idone
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo COUNTER $COUNTER
let COUNTER-=1
done
while 循环 :
16) 每个脚本开始的 #!/bin/sh
或 #!/bin/bash
表示什么意思 ?
#!/bin/bashCOUNTER=0while[$COUNTER-lt10];doechoThecounteris$COUNTER
这一行说明要使用的 shell
。#!/bin/bash
表示脚本使用 /bin/bash
。对于
python 脚本,就是
let COUNTER=COUNTER 1done
#!/usr/bin/python
。
until 循环 :
17) 如何获取文本文件的第 10 行 ?
#!/bin/bashCOUNTER=20until[$COUNTER-lt10];doecho COUNTER $COUNTER
head -10 file|tail -1
let COUNTER-=1done
18) bash 脚本文件的第一个符号是什么
16) 每个脚本开始的#!/bin/sh或#!/bin/bash表示什么意思 ?
#
这一行说明要使用的shell。#!/bin/bash表示脚本使用/bin/bash。对于 python 脚本,就是#!/usr/bin/python。
19) 命令:[ -z "" ] && echo 0 || echo 1
的输出是什么
17) 如何获取文本文件的第 10 行 ?
0
head-10file|tail-1
20) 命令 “export”
有什么用 ?
18) bash 脚本文件的第一个符号是什么
使变量在子 shell
中可用。
#
21) 如何在后台运行脚本 ?
19) 命令:[ -z "" ] && echo 0 || echo 1的输出是什么
在脚本后面添加 “&”
。
0
据 @kashu 的意见,更好的答案是:
20) 命令“export”有什么用 ?
nohup command&
使变量在子shell中可用。
大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &
没了...
21) 如何在后台运行脚本 ?
22) "chmod 500 script"
做什么 ?
在脚本后面添加“&”。
使脚本所有者拥有可执行权限。
据 @kashu 的意见,更好的答案是:
23) ">"
做什么 ?
nohup command&
重定向输出流到文件或另一个流。
大部分时间我们可能是远程使用Linux,我碰到过由于网络断线使得在后台运行的command &没了...
24) &
和 &&
有什么区别
22)"chmod 500 script"做什么 ?
&
- 希望脚本在后台运行的时候使用它&&
- 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它
使脚本所有者拥有可执行权限。
25) 什么时候要在 [ condition ]
之前使用 “if”
?
23)">"做什么 ?
当条件满足时需要运行多条命令的时候。
重定向输出流到文件或另一个流。
26) 命令: name=John && echo 'My name is $name'
的输出是什么
24)&和&&有什么区别
variable
&- 希望脚本在后台运行的时候使用它
27) bash shell
脚本中哪个符号用于注释 ?
&&- 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它
#
25) 什么时候要在[ condition ]之前使用“if”?
28) 命令: echo ${new:-variable}
的输出是什么
当条件满足时需要运行多条命令的时候。
variable
26) 命令:name=John && echo 'My name is $name'的输出是什么
29) '
和 "
引号有什么区别 ?
variable
'
- 当我们不希望把变量转换为值的时候使用它。"
- 会计算所有变量的值并用值代替。
27)bash shell脚本中哪个符号用于注释 ?
30) 如何在脚本文件中重定向标准输出和标准错误流到 log.txt
文件 ?
#
在脚本文件中添加 "exec >log.txt 2>&1"
命令。
28) 命令:echo ${new:-variable}的输出是什么
31) 如何只用 echo
命令获取字符串变量的一部分 ?
variable
echo ${variable:x:y}
x - 起始位置
y - 长度
29)'和"引号有什么区别 ?
例子:
'- 当我们不希望把变量转换为值的时候使用它。
variable="My name is Petras, and I am developer."
echo ${variable:11:6} # 会显示 Petras
"- 会计算所有变量的值并用值代替。
32) 如果给定字符串 variable="User:123:321:/home/dir"
,如何只用
echo
命令获取 home_dir
?
30) 如何在脚本文件中重定向标准输出和标准错误流到log.txt文件 ?
echo ${variable#*:*:*:}
在脚本文件中添加"exec >log.txt 2>&1"命令。
或
31) 如何只用echo命令获取字符串变量的一部分 ?
echo ${variable##*:}
echo ${variable:x:y}x-起始位置y-长度
33) 如何从上面的字符串中获取 “User”
?
例子:
echo ${variable%:*:*:*}
variable="My name is Petras, and I am developer."echo ${variable:11:6}# 会显示 Petras
或
32) 如果给定字符串variable="User:123:321:/home/dir",如何只用echo命令获取home_dir?
echo ${variable%%:*}
echo ${variable#*:*:*:}
34) 如何使用 awk
列出 UID 小于 100 的用户 ?
或
awk -F: '$3<100' /etc/passwd
echo ${variable##*:}
35) 写程序为用户计算主组数目并显示次数和组名
33) 如何从上面的字符串中获取“User”?
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
echo ${variable%:*:*:*}
本文由威尼斯wns.9778官网活动发布于计算机教程,转载请注明出处:分享70个经典的 Shell 脚本面试题与答案
关键词: