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


    原文地址:

    (57条消息) 70 个 Shell 脚本面试问题和答案_TAOXC(◉ɷ◉ )的博客-CSDN博客_shell面试题

    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"
    let V3=$V1+$V2
    echo $V3

    输出

    Hello+World

    13)如何将两个整数相加?

    V1=1
    V2=2
    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
    ————————————————
    版权声明:本文为CSDN博主「TAOXC(◉ɷ◉ )」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/taoxicun/article/details/122922093

  • 相关阅读:
    vue 引用本地图片
    antdVue
    Nest.js —— A progressive Node.js framework
    20184313《网络对抗技术》Exp8 Web综合
    20184313《网络对抗技术》Exp7 网络欺诈防范
    20184313《网络对抗技术》Exp6 MSF应用基础
    20184313《网络对抗技术》Exp5 信息搜集与漏洞扫描
    网页激知序列号之途径(网友提供技术参考)
    【转】Delphi中正则表达式支持中文的写法
    遇到的一个奇怪问题
  • 原文地址:https://www.cnblogs.com/zhangzeyuan/p/16354282.html
Copyright © 2020-2023  润新知