好程式設計師Linux雲端計算教程分享Shell指令碼面試題

好程式設計師IT發表於2019-11-12

  好程式設計師Linux 雲端計算教程分享Shell 指令碼面試題雖然現在Python 在運維工作中已經使用很普遍,但是很多企業在找 Linux 雲端計算工程師的時候還是會問到 shell 指令碼的問題,它有助於你在工作環境中自動完成很多工。今天為 Linux 雲端計算工程師準備了一些 shell 指令碼面試題一起看看吧。

 

  Q:1Shell 指令碼是什麼、它是必需的嗎 ?

 

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

 

  Q:2 什麼是預設登入 shell ,如何改變指定使用者的登入 shell

 

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

 

  #chsh< 使用者名稱 >-s< shell>

 

  #chshlinuxtechi-s/bin/sh

 

  Q:3 可以在 shell 指令碼中使用哪些型別的變數 ?

 

  答:在shell 指令碼,我們可以使用兩種型別的變數:

 

  ·系統定義變數

 

  ·使用者定義變數

 

  系統變數是由系統系統自己建立的。這些變數通常由大寫字母組成,可以透過set ”命令檢視。

 

  使用者變數由系統使用者來生成和定義,變數的值可以透過命令echo$< 變數名 > ”檢視。

 

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

 

  答:這裡有兩個方法來實現:

 

  方法一:

 

  2>&1( #ls/usr/share/doc>out.txt2>&1)

 

  方法二:

 

  &>( #ls/usr/share/doc&>out.txt)

 

  Q:5shell 指令碼中“ if ”語法如何巢狀 ?

 

  答:基礎語法如下:

 

  if[ 條件 ]

 

  then

 

  命令1

 

  命令2

 

  ..

 

  else

 

  if[ 條件 ]

 

  then

 

  命令1

 

  命令2

 

  .

 

  else

 

  命令1

 

  命令2

 

  ..

 

  fi

 

  fi

 

 

  Q:6shell 指令碼中“ $? ”標記的用途是什麼?

 

  答:在寫一個shell 指令碼時,如果你想要檢查前一命令是否執行成功,在 if 條件中使用“ $? ”可以來檢查前一命令的結束狀態。簡單的例子如下:

 

  root@localhost:~#ls/usr/bin/shar

 

  /usr/bin/shar

 

  root@localhost:~#echo$?

 

  0

 

  如果結束狀態是0 ,說明前一個命令執行成功。

 

  root@localhost:~#ls/usr/bin/share

 

  ls:cannotaccess/usr/bin/share:Nosuchfileordirectory

 

  root@localhost:~#echo$?

 

  2

 

  如果結束狀態不是0 ,說明命令執行失敗。

 

  Q:7 shell 指令碼中如何比較兩個數字 ?

 

  答:在if-then 中使用測試命令( -gt 等)來比較兩個數字,例子如下:

 

  #!/bin/bash

 

  x=10

 

  y=20

 

  if[$x-gt$y]

 

  then

 

  echo xisgreaterthany

 

  else

 

  echo yisgreaterthanx

 

  fi

 

  Q:8shell 指令碼中 break 命令的作用 ?

 

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

 

  Q:9shell 指令碼中 continue 命令的作用 ?

 

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

 

  Q:10 告訴我 shell 指令碼中 Case 語句的語法 ?

 

  答:基礎語法如下:

 

  case 變數 in

 

  值1)

 

  命令1

 

  命令2

 

  ..

 

  最後命令

 

  !!

 

  值2)

 

  命令1

 

  命令2

 

  ……

 

  最後命令

 

  ;;

 

  esac

 

  Q:11shell 指令碼中 while 迴圈語法 ?

 

  答:如同for 迴圈, while 迴圈只要條件成立就重複它的命令塊。不同於 for 迴圈, while 迴圈會不斷迭代,直到它的條件不為真。基礎語法:

 

  while[ 條件 ]

 

  do

 

  命令

 

  done

 

  Q:12 如何使指令碼可執行 ?

 

  答:使用chmod 命令來使指令碼可執行。例子如下:

 

  #chmoda+xmyscript.sh

 

  Q:13 #!/bin/bash ”的作用 ?

 

  答:#!/bin/bash shell 指令碼的第一行,稱為釋伴( shebang )行。這裡 # 符號叫做 hash ,而 ! 叫做 bang 。它的意思是命令透過 /bin/bash 來執行。

 

  Q:14shell 指令碼中 for 迴圈語法 ?

 

  答:for 迴圈的基礎語法:

 

  for 變數 in 迴圈列表

 

  do

 

  命令1

 

  命令2

 

  .

 

  最後命令

 

  done

 

  Q:15 如何除錯 shell 指令碼 ?

 

  答:使用'-x' 引數( sh-xmyscript.sh )可以除錯 shell 指令碼。另一個種方法是使用‘ -nv ’引數 (sh-nvmyscript.sh)

 

  Q:16shell 指令碼如何比較字串 ?

 

  答:test 命令可以用來比較字串。測試命令會透過比較字串中的每一個字元來比較。

 

  Q:17Bourneshell(bash) 中有哪些特殊的變數 ?

 

  答:下面的表列出了Bourneshell 為命令列設定的特殊變數。

 

  內建變數解釋

 

  $0 命令列中的指令碼名字

 

  $1 第一個命令列引數

 

  $2 第二個命令列引數

 

 

  $9 第九個命令列引數

 

  $# 命令列引數的數量

 

  $* 所有命令列引數,以空格隔開

 

 

  Q:18 shell 指令碼中,如何測試檔案 ?

 

  答:test 命令可以用來測試檔案。基礎用法如下表格:

 

  Test 用法

 

  -d 檔名如果檔案存在並且是目錄,返回 true

 

  -e 檔名如果檔案存在,返回 true

 

  -f 檔名如果檔案存在並且是普通檔案,返回 true

 

  -r 檔名如果檔案存在並可讀,返回 true

 

  -s 檔名如果檔案存在並且不為空,返回 true

 

  -w 檔名如果檔案存在並可寫,返回 true

 

  -x 檔名如果檔案存在並可執行,返回 true

 

  Q:19 shell 指令碼中,如何寫入註釋 ?

 

  答:註釋可以用來描述一個指令碼可以做什麼和它是如何工作的。每一行註釋以# 開頭。例子如下:

 

  #!/bin/bash

 

  #Thisisacommand

 

  echo Iamloggedinas$USER

 

  Q:20 如何讓 shell 就指令碼得到來自終端的輸入 ?

 

  答:read 命令可以讀取來自終端(使用鍵盤)的資料。 read 命令得到使用者的輸入並置於你給出的變數中。例子如下:

 

  #vi/tmp/test.sh

 

  #!/bin/bash

 

  echo Pleaseenteryourname

 

  readname

 

  echo MyNameis$name

 

  #./test.sh

 

  Pleaseenteryourname

 

  LinuxTechi

 

  MyNameisLinuxTechi

 

  Q:21 如何取消變數或取消變數賦值 ?

 

  答:unset ”命令用於取消變數或取消變數賦值。語法如下所示:

 

  #unset< 變數名 >

 

  Q:22 如何執行算術運算 ?

 

  答:有兩種方法來執行算術運算:

 

  1. 使用 expr 命令

 

  #expr5+2

 

  2. 用一個美元符號和方括號( $[ 表示式 ] )例如:

 

  test=$[16+4];test=$[16+4]

 

  Q:23do-while 語句的基本格式 ?

 

  答:do-while 語句類似於 while 語句,但檢查條件語句之前先執行命令( LCTT 譯註:意即至少執行一次。)。下面是用 do-while 語句的語法

 

  do

 

  {

 

  命令

 

  }while( 條件 )

 

  Q:24 shell 指令碼如何定義函式呢 ?

 

  答:函式是擁有名字的程式碼塊。當我們定義程式碼塊,我們就可以在我們的指令碼呼叫函式名字,該塊就會被執行。示例如下所示:

 

  $diskusage(){df-h;}

 

  譯註:下面是我給的shell 函式語法,原文沒有

 

  [function] 函式名 [()]

 

  {

 

  命令;

 

  [returnint;]

 

}

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2663774/,如需轉載,請註明出處,否則將追究法律責任。

相關文章