70 个你可能遇到的 shell 脚本面试问题及解答

  1. 如何向脚本传递参数 ?
    1
    ./script argument
    例子: 脚本会显示file1.txt
    1
    2
    3
    4
    ./show.sh file1.txt
    cat show.sh
    #!/bin/bash
    echo $1
    (LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。)

  2. 如何在脚本中使用参数 ?
    1
    第一个参数 : $1,第二个参数 : $2
    例子 : 脚本会复制文件(arg1) 到目标地址(arg2)
    1
    2
    3
    4
    ./copy.sh file1.txt /tmp/
    cat copy.sh
    #!/bin/bash
    cp $1 $2

  3. 如何计算传递进来的参数 ?
    $#

  4. 如何在脚本中获取脚本名称 ?
    $0

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

  6. 如何获取文件的最后一行 ?
    1
    tail-1

  7. 如何获取文件的第一行 ?
    1
    head-1

  8. 如何获取一个文件每一行的第三个元素 ?
    1
    awk’{print $3}’

  9. 假如文件中每行第一个元素是 FIND,如何获取第二个元素
    1
    awk’{ if ($1 == “FIND”) print $2}’

  10. 如何调试 bash 脚本
    1
    将 -xv 参数加到 #!/bin/bash 后
    例子:
    1
    #!/bin/bash –xv

  11. 举例如何写一个函数 ?
    1
    2
    3
    function example {
    echo “Hello world!”
    }

  12. 如何向连接两个字符串 ?
    1
    2
    3
    4
    V1=“Hello”
    V2=“World”
    V3= V 1 {V1} V1{V2}
    echo $V3
    输出
    1
    HelloWorld

  13. 如何进行两个整数相加 ?
    1
    2
    3
    4
    V1=1
    V2=2
    let V3= V 1 + V1+ V1+V2
    echo $V3
    输出
    1
    3
    据 @kashu 的意见,本题的更佳回答为:
    两个整数相加,还有若干种方法实现:
    1
    2
    3
    4
    5
    6
    7
    A=5
    B=6
    echo ( ( (( ((A+$B)) # 方法 2
    echo [ [ [A+$B] # 方法 3
    expr $A + $B # 方法 4
    echo A + A+ A+B | bc # 方法 5
    awk ‘BEGIN{print ‘“ A " ′ + ′ " A"'+'" A"+"B”’}’ # 方法 6

  14. 如何检查文件系统中是否存在某个文件 ?
    1
    2
    3
    4
    if [ -f /var/log/messages ]
    then
    echo “File exists”
    fi

  15. 写出 shell 脚本中所有循环语法 ?
    for 循环 :
    1
    2
    3
    foriin ( l s ) ; d o e c h o i t e m : (ls);do echo item: (ls);doechoitem:i
    done

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

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

  1. 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
    1
    这一行说明要使用的 shell。#!/bin/bash 表示脚本使用 /bin/bash。对于 python 脚本,就是 #!/usr/bin/python。

  2. 如何获取文本文件的第 10 行 ?
    1
    head -10 file|tail -1

  3. bash 脚本文件的第一个符号是什么
    1

  1. 命令:[ -z “” ] && echo 0 || echo 1 的输出是什么
    1
    0

  2. 命令 “export” 有什么用 ?
    1
    使变量在子 shell 中可用。

  3. 如何在后台运行脚本 ?
    1
    在脚本后面添加 “&”。

据 @kashu 的意见,更好的答案是:
1
nohup command&

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

  1. “chmod 500 script” 做什么 ?
    1
    使脚本所有者拥有可执行权限。

  2. “>” 做什么 ?
    1
    重定向输出流到文件或另一个流。

  3. & 和 && 有什么区别
    1
    2
    & - 希望脚本在后台运行的时候使用它
    && - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

  4. 什么时候要在 [ condition ] 之前使用 “if” ?
    1
    当条件满足时需要运行多条命令的时候。

  5. 命令: name=John && echo ‘My name is $name’ 的输出是什么
    1
    My name is $name

  6. bash shell 脚本中哪个符号用于注释 ?
    1

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

  2. ’ 和 " 引号有什么区别 ?
    1
    2
    ’ - 当我们不希望把变量转换为值的时候使用它。
    " - 会计算所有变量的值并用值代替。

  3. 如何在脚本文件中重定向标准输出和标准错误流到 log.txt 文件 ?
    1
    在脚本文件中添加 “exec >log.txt 2>&1” 命令。

  4. 如何只用 echo 命令获取字符串变量的一部分 ?
    1
    2
    3
    echo ${variable❌y}
    x - 起始位置
    y - 长度
    例子:
    1
    2
    3
    variable=“My name is Petras, and I am developer.”

echo ${variable:11:6} # 会显示 Petras

  1. 如果给定字符串 variable=“User:123:321:/home/dir”,如何只用 echo 命令获取 home_dir ?
    1
    echo ${variable#:::}

    1
    echo ${variable##
    :}

  2. 如何从上面的字符串中获取 “User” ?
    1
    echo ${variable%:::}

    1
    echo ${variable%%:
    }

  3. 如何使用 awk 列出 UID 小于 100 的用户 ?
    1
    awk -F: ‘$3<100’ /etc/passwd

  4. 写程序为用户计算主组数目并显示次数和组名
    1
    2
    3
    4
    cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c g
    do
    { echo c ; g r e p : c; grep : c;grep:g: /etc/group|cut -d: -f1;}|xargs -n 2
    done

  5. 如何在 bash shell 中更改标准的域分隔符为 “:” ?
    1
    IFS=":"

  6. 如何获取变量长度 ?
    1
    ${#variable}

  7. 如何打印变量的最后 5 个字符 ?
    1
    echo ${variable: -5}

  8. {variable:-10} 和 variable:−10和{variable: -10} 有什么区别?
    1
    2
    ${variable:-10} - 如果之前没有给 variable 赋值则输出 10;如果有赋值则输出该变量
    ${variable: -10} - 输出 variable 的最后 10 个字符

  9. 如何只用 echo 命令替换字符串的一部分 ?
    1
    echo ${variable//pattern/replacement}

  10. 哪个命令将命令替换为大写 ?
    1
    tr ‘[:lower:]’ ‘[:upper:]’

  11. 如何计算本地用户数目 ?
    1
    wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -l

  12. 不用 wc 命令如何计算字符串中的单词数目 ?
    1
    2
    set ${string}
    echo $#

  13. “export $variable” 或 “export variable” 哪个正确 ?
    1
    export variable

  14. 如何列出第二个字母是 a 或 b 的文件 ?
    1
    ls -d ?[ab]*

  15. 如何将整数 a 加到 b 并赋值给 c ?
    1
    c=$((a+b))

    1
    c=expr $a + $b

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

  16. 如何去除字符串中的所有空格 ?
    1
    echo $string|tr -d " "

  17. 重写这个命令,将输出变量转换为复数: item=“car”; echo “I like $item” ?
    1
    item=“car”; echo “I like ${item}s”

  18. 写出输出数字 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

  19. 如何打印传递给脚本的所有参数 ?
    1
    echo $*

    1
    echo $@

  20. [ a == a==b ] 和 [ a -eq a−eqb ] 有什么区别
    1
    2
    [ $a == $b ] - 用于字符串比较
    [ $a -eq $b ] - 用于数字比较

  21. = 和 == 有什么区别
    1
    2
    = - 用于为变量赋值
    == - 用于字符串比较

  22. 写出测试 $a 是否大于 12 的命令 ?
    1
    [ $a -gt 12 ]

  23. 写出测试 $b 是否小于等于 12 的命令 ?
    1
    [ $b -le 12 ]

  24. 如何检查字符串是否以字母 “abc” 开头 ?
    1
    [[ $string == abc* ]]

  25. [[ string == abc* ]] 和 [[ string==abc∗]]和[[string == “abc*” ]] 有什么区别
    1
    2
    [[ $string == abc* ]] - 检查字符串是否以字母 abc 开头
    [[ $string == “abc” ]] - 检查字符串是否完全等于 abc

  26. 如何列出以 ab 或 xy 开头的用户名 ?
    1
    egrep “ab|xy” /etc/passwd|cut -d: -f1

  27. bash 中 $! 表示什么意思 ?
    1
    后台最近执行命令的 PID.

  28. $? 表示什么意思 ?
    1
    前台最近命令的结束状态。

  29. 如何输出当前 shell 的 PID ?
    1
    echo $$

  30. 如何获取传递给脚本的参数数目 ?
    1
    echo $#
    (LCTT 译注:和第3题重复了。)

62) * 和 ∗和@ 有什么区别
1
2
$* - 以一个字符串形式输出所有传递到脚本的参数
$@ - 以 $IFS 为分隔符列出所有传递到脚本中的参数

  1. 如何在 bash 中定义数组 ?
    1
    array=(“Hi” “my” “name” “is”)

  2. 如何打印数组的第一个元素 ?
    1
    echo ${array[0]}

  3. 如何打印数组的所有元素 ?
    1
    echo ${array[@]}

  4. 如何输出所有数组索引 ?
    1
    echo ${!array[@]}

  5. 如何移除数组中索引为 2 的元素 ?
    1
    unset array[2]

  6. 如何在数组中添加 id 为 333 的元素 ?
    1
    array[333]=“New_element”

  7. shell 脚本如何获取输入的值 ?
    a) 通过参数
    1
    ./script param1 param2
    b) 通过 read 命令
    1
    read -p "Destination backup Server : " desthost

  8. 在脚本中如何使用 “expect” ?
    1
    2
    3
    4
    5
    6
    /usr/bin/expect << EOD
    spawn rsync -ar ${line} d e s t h o s t : {desthost}: desthost:{destpath}
    expect “?assword:
    send “${password}\r”
    expect eof
    EOD

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 什么是shell脚本shell脚本是一种脚本语言,它是在Unix、Linux和其他类Unix操作系统上运行的一种脚本语言。它是一种用于编写命令行脚本的语言,可以自动执行一系列操作。 2. shell脚本有哪些优点? - 可以自动化完成一些繁琐的任务。 - 可以快速编写一些小的辅助工具。 - 可以通过shell脚本进行一些系统管理和监控。 3. shell脚本与其他编程语言的区别是什么? shell脚本主要是用于执行命令行操作,而其他编程语言则更多用于开发应用程序。Shell脚本的语法比较简单,易于学习和使用,但在复杂的应用程序中,其他编程语言的表现要更好。 4. 如何创建一个shell脚本? 使用文本编辑器,例如vi或nano,创建一个文本文件,然后将shell脚本代码写入文件中。最后,使用chmod命令更改文件的权限,以便可以执行该脚本。 5. 如何运行一个shell脚本? 在命令行中输入./脚本名.sh,其中脚本名.sh是你创建的脚本的名称。 6. 如何获取脚本的输入参数? 使用$1、$2、$3等特殊变量来获取脚本的输入参数,例如$1表示第一个参数,$2表示第二个参数,以此类推。 7. 如何在脚本中使用条件语句? 使用if语句,例如: if [ $a -eq $b ] then echo "a等于b" else echo "a不等于b" fi 8. 如何在脚本中使用循环语句? 使用for语句或while语句,例如: for i in {1..10} do echo $i done 或者 i=1 while [ $i -le 10 ] do echo $i i=$((i+1)) done 9. 如何在脚本中定义变量? 使用=操作符定义变量,例如: name="John" 10. 如何在脚本中输出变量? 使用$操作符输出变量,例如: echo $name

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值