精华内容
下载资源
问答
  • 1. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。 答案 : 输出用户名,当前日期和时间,以及当前工作目录的命令就是logname,date,who i am和pwd。 现在,创建一个名为userstats.sh文件,将下面...
  • 1) 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 1 2 3 4 ./show.sh file1.txt cat show.sh #!/bin/bash echo $1 2) 如何在脚本中使用参数 ? ...

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

    ./script argument

    例子: 显示文件名称脚本

    1

    2

    3

    4

    ./show.sh file1.txt

    cat show.sh

    #!/bin/bash

    echo $1

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

    第一个参数 : $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) 如何获取文件的最后一行 ?

     tail -nf Console.log  --n为最后n行               tail -n 5 filename

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

    head-1

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

    awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

    awk处理过程: 依次对每一行进行处理,然后输出

    awk '{print $3}'

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

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

    10) 如何调试 bash 脚本

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

    例子:

    #!/bin/bash –xv

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

    1

    2

    3

    function example {

    echo "Hello world!"

    }

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

    1

    2

    3

    4

    V1="Hello"

    V2="World"

    V3=${V1}${V2}

    echo $V3

    输出

    HelloWorld

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

    1

    2

    3

    4

    V1=1

    V2=2

    let V3=$V1+$V2

    echo $V3

    输出

    3

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

    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+$B | bc # 方法 5

    awk 'BEGIN{print '"$A"'+'"$B"'}'  # 方法 6

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

    1

    2

    3

    4

    if [ -f /var/log/messages ]

    then

    echo "File exists"

    fi

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

    for 循环 :

    1

    2

    3

    for i in$(ls);do

    echo item:$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

    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 || echo 1 的输出是什么

    0

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

    使变量在子 shell 中可用。

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

    在脚本后面添加 “&”

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

    nohup command&

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

    nohup /root/start.sh &

    在shell中回车后提示:

    [~]$ appending output to nohup.out

    原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。

    但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。

    咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。

    在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:

    他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;

    而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。

    22) "chmod 500 script" 做什么 ?

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

    23) ">" 做什么 ?

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

    24) & 和 && 有什么区别

    • & - 希望脚本在后台运行的时候使用它
    • && - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它

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

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

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

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

    #

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

    variable

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

    • ' - 当我们不希望把变量转换为值的时候使用它。
    • " - 会计算所有变量的值并用值代替。

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

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

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

    1

    2

    3

    echo ${variable:x:y}

    x - 起始位置

    y - 长度

    例子:

    1

    2

    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##*:}

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

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

    echo ${variable%%:*}

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

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

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

    1

    2

    3

    4

    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;如果有赋值则输出该变量
    • ${variable: -10} - 输出 variable 的最后 10 个字符

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

    echo ${variable//pattern/replacement}

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

    tr '[:lower:]' '[:upper:]'

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

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

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

    ?

    1

    2

    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"; echo "I like $item" ?

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

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

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

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

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

    echo $*

    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 $#

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

    *62) $* 和 $@ 有什么区别*

    • $* - 以一个字符串形式输出所有传递到脚本的参数
    • $@ - 以 $IFS 为分隔符列出所有传递到脚本中的参数

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

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

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

    echo ${array[0]}

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

    echo ${array[@]}

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

    echo ${!array[@]}

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

    unset array[2]

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

    array[333]="New_element"

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

    a) 通过参数

    ./script param1 param2

    b) 通过 read 命令

    read -p "Destination backup Server : " desthost

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

    ?

    1

    2

    3

    4

    5

    6

    /usr/bin/expect << EOD

    spawn rsync -ar ${line} ${desthost}:${destpath}

    expect "*?assword:*"

    send "${password}\r"

    expect eof

    EOD

    祝你好运 !! 如果你有任何疑问或者问题需要解答都可以在下面的评论框中写下来。让我们知道这对你的面试有所帮助:-)

    展开全文
  • Shell脚本面试题及答案

    千次阅读 2020-02-16 17:27:16
    1. 什么是shell脚本shell脚本是包含包含一个或多个命令的文本文件的命令。 2. 为什么要使用shell脚本? 系统管理员使用它来发出许多命令来完成任务。 所有命令都在文本文件(shell脚本)中一起添加,以完成...

    1. 什么是shell脚本?

    shell脚本是包含包含一个或多个命令的文本文件的命令。

    2. 为什么要使用shell脚本?

    系统管理员使用它来发出许多命令来完成任务。 所有命令都在文本文件(shell脚本)中一起添加,以完成日常例行任务。

    3. shell脚本有什么优点(好处)?

    这些是shell脚本的两个主要优点:

    • 它可以帮助您开发自己的操作系统,包含最适合相关功能。
    • 可以根据自己的平台设计软件应用程序。
    • 用于管理和维护系统。

    4. shell脚本有哪些缺点?

    以下是shell脚本的主要缺点:

    • 弱设计可能会破坏整个过程,并可能导致代价高昂的错误。
    • 如果在创建期间发生键入错误,则它可以删除整个数据以及分区数据。
    • 它的初始过程缓慢并逐渐改善。
    • 不同操作系统之间的可移植性很差。

    5. shell脚本中使用的变量有哪些类型?

    shell脚本中使用了两种类型的变量:

    • 系统定义的变量:这些变量由操作系统本身定义或创建。
    • 用户定义的变量:这些变量由系统用户定义。

    6. shell脚本中“嵌套if语句”的语法是什么?

    有关shell脚本中“嵌套if语句”的语法,参考以下代码 -

    if [ Condition ]  
    then  
        command1  
        command2  
        .....  
    else  
    if [ condition ]  
    then  
        command1  
        command2  
        .....  
    else  
        command1  
        command2  
        .....

     

    7. $?标识在shell脚本中有什么用?

    在编写shell脚本时$?标识与if语句一起用于检查上一个命令是否成功执行。

    8. 在Shell中break命令有什么用?

    break命令用于从正在进行的循环中中断退出。

    9. 什么是GUI脚本(应用程序)?

    GUI代表图形用户界面。 它用于控制计算机及其应用程序。 GUI脚本支持不同的应用程序。 它主要取决于操作系统。

    10. Linux/Unix进程的经历的几个阶段是什么?

    Linux/Unix进程通常经历四个阶段:

    • 等待:在这个阶段,Linux进程等待资源。
    • 运行:在此阶段,Linux进程当前正在执行。
    • 停止:在此阶段,Linux进程在成功执行后停止。
    • 僵尸:这个阶段称为僵尸,因为该进程已停止但仍在进程表中处于活动状态。

    11. 是否可以在“echo”命令的位置替换“ls”命令?

    可以。

    12. shell脚本中while循环的语法是什么?

    while循环用于多次重复其命令块。 它与for循环不同,它会迭代直到while条件不再为真。

    while [ test_condition ]  
    do  
        commands...  
    done

    13. 软链接和硬链接有什么区别?

    Inode:每个文件都包含一个称为“inode”的索引号,该索引号由关于相关文件的元数据组成。

    硬链接:是原始链接文件的镜像。 在这种情况下,硬链接和原始文件包含相同的inode。 无论是否删除原始文件,硬链接仍保持链接。

     

    软链接:就像Windows操作系统的快捷功能。 在这种情况下,硬链接和原始文件包含不同的inode。 如果删除原始文件,软链接将无法正常工作。

     

    14. Shell脚本中$#标识符的用途是什么? 

    Shell脚本中$#标识符显示传递给脚本的参数总数。

    15. 什么是僵尸进程?

    僵尸进程是死亡的进程,但父进程未选择退出状态。

    16. Linux中的3个标准流有哪些?

    Linux中的3个标准流是:

    • 0 - 标准输入
    • 1 - 标准输出
    • 2 - 标准错误
    展开全文
  • [root@server shell]# cat install.sh #!/bin/bash if rpm -q $1 &>/dev/null; then echo "$1 is already installed." else echo "$1 is not installed!" fi 5 检查主机存活状态 #!/bin/bash IP_LIST=...

    1 获取随机字符串或数字

    获取随机8位字符串:

    Method One

    echo $RANDOM |md5sum |cut -c 1-8
    

    Method Two

    openssl rand -base64 4
    

    Method Three

    cat /proc/sys/kernel/random/uuid |cut -c 1-8
    

    在这里插入图片描述

    获取随机8位数字:

    Method One

    echo $RANDOM |cksum |cut -c 1-8
    

    Method Two

    openssl rand -base64 4 |cksum |cut -c 1-8
    

    Method Three

    date +%N |cut -c 1-8
    

    在这里插入图片描述

    2 定义一个颜色输出字符串函数

    Method one

    #!/bin/bash
    
    function echo_color() {
        if [ $1 == "green" ]; then
            echo -e "\033[32;40m$2\033[0m"
        elif [ $1 == "red" ]; then
            echo -e "\033[31;40m$2\033[0m"
        fi
    }
    
    echo_color red "test"
    

    在这里插入图片描述

    Method Two

    #!/bin/bash
    
    function echo_color() {
        case $1 in
            green)
                echo -e "\033[32;40m$2\033[0m"
                ;;
            red)
                echo -e "\033[31;40m$2\033[0m" 
                ;;
            *) 
                echo "Example: echo_color red string"
        esac
    }
    echo_color red "我爱你"
    

    在这里插入图片描述

    function关键字定义一个函数,可加或不加。

    3 批量创建用户

    #!/bin/bash
    DATE=$(date +%F_%T)
    USER_FILE=user.txt
    echo_color(){
        if [ $1 == "green" ]; then
            echo -e "\033[32;40m$2\033[0m"
        elif [ $1 == "red" ]; then
            echo -e "\033[31;40m$2\033[0m"
        fi
    }
    
    # 如果用户文件存在并且大小大于0就备份
    if [ -s $USER_FILE ]; then
        mv $USER_FILE ${USER_FILE}-${DATE}.bak
        echo_color green "$USER_FILE exist, rename ${USER_FILE}-${DATE}.bak"
    fi
    echo -e "User\tPassword" >> $USER_FILE
    echo "----------------" >> $USER_FILE
    for USER in user{1..10}; do
        if ! id $USER &>/dev/null; then
            PASS=$(echo $RANDOM |md5sum |cut -c 1-8)
            useradd $USER
            echo $PASS |passwd --stdin $USER &>/dev/null
            echo -e "$USER\t$PASS" >> $USER_FILE
            echo "$USER User create successful."
        else
            echo_color red "$USER User already exists!"
        fi
    done
    

    在这里插入图片描述
    在这里插入图片描述

    4 检查软件包是否安装

    [root@server shell]# cat install.sh 
    #!/bin/bash
    if rpm -q $1 &>/dev/null; then
        echo "$1 is already installed."
    else
        echo "$1 is not installed!"
    fi
    

    在这里插入图片描述

    5 检查主机存活状态

    #!/bin/bash  
    IP_LIST="172.25.6.250 172.25.6.1 172.25.6.2 114.114.114.114"
    for IP in $IP_LIST; do
        NUM=1
        while [ $NUM -le 3 ]; do
            if ping -c 1 $IP > /dev/null; then
                echo "$IP Ping is successful."
                break
            else
                # echo "$IP Ping is failure $NUM"
                FAIL_COUNT[$NUM]=$IP
                let NUM++
            fi
        done
        if [ ${#FAIL_COUNT[*]} -eq 3 ];then
            echo "${FAIL_COUNT[1]} Ping is failure!"
            unset FAIL_COUNT[*]
        fi
    done
    

    在这里插入图片描述

    6 监控CPU、内存和硬盘利用率

    1)CPU

    借助vmstat工具来分析CPU统计信息。

    #!/bin/bash
    DATE=$(date +%F" "%H:%M)
    IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')  # 只支持CentOS6
    MAIL="example@mail.com"
    if ! which vmstat &>/dev/null; then
        echo "vmstat command no found, Please install procps package." 
        exit 1
    fi
    US=$(vmstat |awk 'NR==3{print $13}')
    SY=$(vmstat |awk 'NR==3{print $14}')
    IDLE=$(vmstat |awk 'NR==3{print $15}')
    WAIT=$(vmstat |awk 'NR==3{print $16}')
    USE=$(($US+$SY))
    if [ $USE -ge 50 ]; then
        echo "
        Date: $DATE
        Host: $IP
        Problem: CPU utilization $USE
        " | mail -s "CPU Monitor" $MAIL
    fi
    

    2)内存

    #!/bin/bash
    DATE=$(date +%F" "%H:%M)
    IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')  
    MAIL="example@mail.com"
    TOTAL=$(free -m |awk '/Mem/{print $2}')
    USE=$(free -m |awk '/Mem/{print $3-$6-$7}')
    FREE=$(($TOTAL-$USE))
    # 内存小于1G发送报警邮件
    if [ $FREE -lt 1024 ]; then
        echo "
        Date: $DATE
        Host: $IP
        Problem: Total=$TOTAL,Use=$USE,Free=$FREE
        " | mail -s "Memory Monitor" $MAIL
    fi
    

    3)硬盘

    #!/bin/bash
    DATE=$(date +%F" "%H:%M)
    IP=$(ifconfig eth0 |awk -F '[ :]+' '/inet addr/{print $4}')  
    MAIL="example@mail.com"
    TOTAL=$(fdisk -l |awk -F'[: ]+' 'BEGIN{OFS="="}/^Disk \/dev/{printf "%s=%sG,",$2,$3}')
    PART_USE=$(df -h |awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5),$6}')
    for i in $PART_USE; do
        PART=$(echo $i |cut -d"=" -f1)
        USE=$(echo $i |cut -d"=" -f2)
        MOUNT=$(echo $i |cut -d"=" -f3)
        if [ $USE -gt 80 ]; then
            echo "
            Date: $DATE
            Host: $IP
            Total: $TOTAL
            Problem: $PART=$USE($MOUNT)
            " | mail -s "Disk Monitor" $MAIL
        fi
    done
    

    7 批量主机磁盘利用率监控

    前提监控端和被监控端SSH免交互登录或者密钥登录。

    写一个配置文件保存被监控主机SSH连接信息,文件内容格式:IP User Port

    #!/bin/bash
    HOST_INFO=host.info
    for IP in $(awk '/^[^#]/{print $1}' $HOST_INFO); do
        USER=$(awk -v ip=$IP 'ip==$1{print $2}' $HOST_INFO)
        PORT=$(awk -v ip=$IP 'ip==$1{print $3}' $HOST_INFO)
        TMP_FILE=/tmp/disk.tmp
        ssh -p $PORT $USER@$IP 'df -h' > $TMP_FILE
        USE_RATE_LIST=$(awk 'BEGIN{OFS="="}/^\/dev/{print $1,int($5)}' $TMP_FILE)
        for USE_RATE in $USE_RATE_LIST; do
            PART_NAME=${USE_RATE%=*}
            USE_RATE=${USE_RATE#*=}
            if [ $USE_RATE -ge 80 ]; then
                echo "Warning: $PART_NAME Partition usage $USE_RATE%!"
            fi
        done
    done
    

    8 检查网站可用性

    1)检查URL可用性

    方法1:
    check_url() {
        HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1)
        if [ $HTTP_CODE -ne 200 ]; then
            echo "Warning: $1 Access failure!"
        fi
    }
    check_url www.baidu.com
    
    方法2:
    check_url() {
    if ! wget -T 10 --tries=1 --spider $1 >/dev/null 2>&1; then  
    #-T超时时间,--tries尝试1次,--spider爬虫模式
            echo "Warning: $1 Access failure!"
        fi
    }
    check_url www.baidu.com
    

    2)判断三次URL可用性

    思路与上面检查主机存活状态一样。

    方法1:利用循环技巧,如果成功就跳出当前循环,否则执行到最后一行
    #!/bin/bash  
    check_url() {
        HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $1)
        if [ $HTTP_CODE -eq 200 ]; then
            continue
        fi
    }
    URL_LIST="www.baidu.com www.agasgf.com"
    for URL in $URL_LIST; do
        check_url $URL
        check_url $URL
        check_url $URL
        echo "Warning: $URL Access failure!"
    done
    方法2:错误次数保存到变量
    #!/bin/bash  
    URL_LIST="www.baidu.com www.agasgf.com"
    for URL in $URL_LIST; do
        FAIL_COUNT=0
        for ((i=1;i<=3;i++)); do
            HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)
            if [ $HTTP_CODE -ne 200 ]; then
                let FAIL_COUNT++
            else
                break
            fi
        done
        if [ $FAIL_COUNT -eq 3 ]; then
            echo "Warning: $URL Access failure!"
        fi
    done
    方法3:错误次数保存到数组
    #!/bin/bash  
    URL_LIST="www.baidu.com www.agasgf.com"
    for URL in $URL_LIST; do
        NUM=1
        while [ $NUM -le 3 ]; do
            HTTP_CODE=$(curl -o /dev/null --connect-timeout 3 -s -w "%{http_code}" $URL)
            if [ $HTTP_CODE -ne 200 ]; then
                FAIL_COUNT[$NUM]=$IP  #创建数组,以$NUM下标,$IP元素
                let NUM++
            else
                break
            fi
        done
        if [ ${#FAIL_COUNT[*]} -eq 3 ]; then
            echo "Warning: $URL Access failure!"
            unset FAIL_COUNT[*]    #清空数组
        fi
    done
    

    9 检查MySQL主从同步状态

    #!/bin/bash  
    USER=bak
    PASSWD=123456
    IO_SQL_STATUS=$(mysql -u$USER -p$PASSWD -e 'show slave status\G' |awk -F: '/Slave_.*_Running/{gsub(": ",":");print $0}')  #gsub去除冒号后面的空格
    for i in $IO_SQL_STATUS; do
        THREAD_STATUS_NAME=${i%:*}
        THREAD_STATUS=${i#*:}
        if [ "$THREAD_STATUS" != "Yes" ]; then
            echo "Error: MySQL Master-Slave $THREAD_STATUS_NAME status is $THREAD_STATUS!"
        fi
    done
    
    展开全文
  • Shell编程常见面试题(待续) 1、使用Linux命令查询file中空行所在的行号 awk '/^$/{print NR}' file.txt 2、有文件cj.txt内容如下,使用Linux命令计算第二列的和并输出 张三 70 李四 80 王五 90 cat cj.txt | awk -...
  • 今天就给大家分享一些常见Shell脚本面试题。 1、Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可...

    很多企业在招聘Linux云计算工程师的时候都会提问 Shell 脚本的问题,一方面是因为它是云计算工程师必备的理论知识基础,另一方面掌握Shell脚本有助于你在工作环境中自动完成很多任务。今天就给大家分享一些常见的Shell脚本面试题。

    1、Shell脚本是什么、它是必需的吗?

    答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。

    2、在Shell脚本中可以使用哪些类型的变量?

    答:在Shell脚本,我们可以使用两种类型的变量:1)系统定义变量。系统变量是由系统系统自己创建的。这些变量通常由大写字母组成,可以通过“set”命令查看。2)用户定义变量。用户变量由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。

    3、Shell脚本中“$?”标记的用途是什么?

    答:在写一个Shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。如果结束状态是0,说明前一个命令执行成功,如果结束状态不是0,说明命令执行失败。

    4、Shell脚本中break命令和continue命令有什么不同?

    答:break命令一个简单的用途是退出执行中的循环。我们可以在while和until循环中使用break命令跳出循环。continue命令不同于break命令,它只跳出当前循环的迭代,而不是整个循环。continue命令很多时候是很有用的,例如错误发生,但我们依然希望继续执行大循环的时候。

    5、如何执行算术运算?

    答:有两种方法来执行算术运算:1)使用expr命令:# expr 5 + 2;2)用一个美元符号和方括号( [ 表 达 式 ] ) 例 如 : t e s t = [ 表达式 ])例如:test= []test=[16 + 4] ; test=$[16 + 4]

    6、Shell脚本中各个循环的用法是什么?

    1)for循环的基础语法:

    for 变量 in 循环列表

    do

    命令1

    命令2

    ….

    最后命令

    done

    2)while循环只要条件成立就重复它的命令块。不同于for循环,while循环会不断迭代,直到它的条件不为真。基础语法:

    while [ 条件 ]

    do

    命令…

    done

    3)do-while语句的基本格式 ?

    答:do-while语句类似于while语句,但检查条件语句之前先执行命令(LCTT 译注:意即至少执行一次)。do-while语句的语法:

    do

    {

    命令

    } while (条件)

    展开全文
  • Shell 脚本面试题与答案 如何向脚本传递参数 ? ./script argument 例子: 显示文件名称脚本 ./show.sh file1.txt cat show.sh #!/bin/bash echo $1 (LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。) 如何...
  • shell脚本案例(一):常见运维面试题

    千次阅读 2018-05-16 13:09:22
    在这里,将会结合工作中各种场景,利用shell脚本解决问题,完成目标。 实用案例(一) 监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。 a. 开发一个守护进程脚本每30秒实现检测一次。 b....
  • linux-shell脚本面试题 精品文档 精品文档 收集于网络如有侵权请联系管理员删除 收集于网络如有侵权请联系管理员删除 精品文档 收集于网络如有侵权请联系管理员删除 非常好的十道Linux shell脚本面试题 1编写个shell...
  • 24 道 shell 脚本面试题

    2019-05-09 10:02:34
    如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用...
  • Linux Shell编程最牛面试题全揭秘 119页,SHELL编程很重要的
  • shell脚本面试题

    2020-06-09 14:22:42
    Q:1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成...
  • shell脚本面试题-转

    2019-09-28 06:37:08
    防止链接丢失,故转到自己的博客来 ... Q:1 Shell脚本是什么、它是必需的...作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成这些日常工作任务。 ...
  • 虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到shell 脚本的问题,它有助于你在工作环境中自动完成很多任务。如...
  • Shell脚本面试题

    2019-04-17 20:09:00
    Q:1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell脚本)来完成...
  • 虽然现在Python在运维工作中已经使用很普遍,但是很多企业在找Linux云计算工程师的时候还是会问到 shell 脚本的问题,它有助于你在工作环境中自动完成很多任务。如...
  • shell常见面试题

    万次阅读 2018-12-28 19:28:31
    如下是一些常见Shell脚本面试问题。 1. 如何在脚本中使用参数 ? 第一个参数 : $1,第二个参数 :$2 例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ./copy.sh file1.txt /tmp/ cat copy.sh #!/bin/bash cp $1 $2 2....
  • 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么、它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一...
  • 24道Shell脚本面试题

    2019-06-19 16:39:14
    什么是shell脚本,他是必须需要的么 一个shell脚本是一个文本文件,他包含一个或多个命令。作为系统管理员,我们经常需要使用一个或多个命令来完成一个任务,我们可以将这些命令添加到一个文本文件中来完成日常...
  • Shell 脚本面试题70道

    千次阅读 2019-04-21 22:56:42
    我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答。了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。在过去的几年里,我们注意到所有的 ...
  • Shell脚本编写及常见面试题 4、 50 道网络面试题及答案(上) 5、 50 道网络面试题及答案(下) 6、 一文读懂 Shell 中各种括号的作用 7、 Linux 思维导图整理(建议收藏) 8、 Shell编程 | 脚本参数与交互及常见...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,947
精华内容 3,978
关键字:

常见shell脚本面试题