1. 程式人生 > >面試你必須懂的bash之25問!

面試你必須懂的bash之25問!

Bash shell 25問

一、Shell指令碼是什麼、它是必需的嗎?

一個Shell指令碼是一個文字檔案,包含一個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以新增這些所有命令在一個文字檔案(Shell指令碼)來完成這些日常工作任務。

二、什麼是預設登入shell,如何改變指定使用者的登入shell?

在Linux作業系統,“/bin/bash”是預設登入shell,是在建立使用者時分配的。使用chsh命令可以改變預設的shell。示例如下所示:

  • chsh <username> -s <shell>

三、可以在shell指令碼中使用哪些型別的變數?

可以定義如下兩種型別的變數

  • 系統定義變數
  • 使用者定義變數

四、如何將標準輸出和錯誤輸出同時重定向到同一位置?

可以有兩種實現方法:

  • 2>&1
  • &>

五、shell指令碼中”if”語法如何巢狀?

示例如下:
if [ 條件 ] then;
    command ...
else 
    if [ 條件 ] then; 
        command...
    else 
        command...
    fi 
fi

六、shell指令碼中”$?”標記的用途是什麼?

“$?”可以來檢查前一命令的結束狀態,通常”0”表示成功,”1-255”表示執行失敗

七、在shell指令碼中如何比較兩個數字 ?

可以使用-gt-lt`` 、-ne-eq`來進行比較。

八、shell指令碼中break命令的作用 ?

break命令一個簡單的用途是退出執行中的迴圈。我們可以在while和until迴圈中使用break命令跳出迴圈

九、shell指令碼中continue命令的作用 ?

continue命令不同於break命令,它只跳出當前迴圈的迭代,而不是整個迴圈。continue命令很多時候是很有用的,例如錯誤發生,但我們依然希望

十、如何執行一個指令碼?

通常賦予指令碼執行許可權或使用bash命令呼叫,如下所示:
  • chmod +x script.sh
  • bash script.sh

十一、指令碼的基本格式?

如下格式:

#!/bin/bash
#
#auther: magedu
#description:This is scripts
指令碼主體

十二、如何除錯shell指令碼?

通常使用bash 命令中 -x引數來執行指令碼,如下格式:
  • bash -x script.sh

十三、shell指令碼如何比較字串?

如下格式:
#!/bin/bash
A="mageu"
B="magedu"

[[ "$A" == "$B" ]] && echo "字串相同" || echo "字串不同"

十四、bash中有哪些特殊變數?

  • $0 : 命令列中的指令碼名字
  • $1..$9 : 指令碼可接受的引數個數
  • $# : 命令列引數的數量
  • $* : 所有命令引數,轉換為一個字串
  • [email protected] :  所有命令引數,轉換為一個字串

十五、指令碼中如何測試檔案?

  • -d : 檔案是否存在且是目錄
  • -e : 檔案是否存在
  • -f : 檔案是否存在且是普通檔案
  • -r : 檔案存在且是否可讀
  • -s : 檔案存在且不為空
  • -w : 檔案存在且可寫
  • -x : 檔案存在且可執行

十六、指令碼中如何得到來自使用者終端的輸入值?

如下示例:
#!/bin/bash
#
#auther: mage team
#
read -p "Please Enter Your Chooice: " STR
echo "${STR}

十七、如何撤消變數或取消變數的值?

  • unset $VAR
  • VAR=

十八、bash中如何進行算術運算?

有如下三種方法:
  • let i++
  • expr 1 + 2
  • $[ 2 + 3]
  • $(($num1 + $num2))

十九、如何定義一個函式?

方法一:
func_name() {
    func body
    ...
}
方法二:
function func_name(){
    func body
    ...
}

二十、如何在shell指令碼中使用BC計算器?

  • VAR=$(echo "options;expression" | bc)

二十一、如何檢視所有的非列印字元?

如下操作步驟
  • 使用vim工具開啟文字;
  • 使用ESC + : ,進入命令模式;
  • 輸入set list

二十二、如何向指令碼傳遞一個訊號?

使用trap命令來獲取,如下格式:
#!/bin/bash
# auther: mage team
trap 'echo "quit";exit1' INT

二十三、如何定義一個數組?

有如下方式:
  • declare -a NAME : 申明一個索引陣列
  • declare -A NAME : 申明一個關聯陣列

二十四、如何計算一個數組的元素個數?

可以使用如下方式來引用:
  • ${#ARRAY_NAME[*]}
  • ${#ARRAY_NAME[@]}
可以在指令碼中計算
#!/bin/bash
# auther : mage team
#
file_list=(`ls /www/log/access_log/`)
NUM= $[ ${#file_list[*]} - 1 ]
echo "$NUM"

二十五、如何引用一個變數?

有如下兩種方式:
  • $VAR_NAME
  • ${VAR_NAME}

文章出處:運維部落

文:馬哥Linux團隊