Linux Shell腳本面試25個經典問答

1 Shell腳本是什麼、它是必需的嗎?

答:一個Shell腳本是一個文本文件,包含一個或多個命令。做爲系統管理員,咱們常常須要使用多個命令來完成一項任務,咱們能夠添加這些全部命令在一個文本文件(Shell腳本)來完成這些平常工做任務。node

2 什麼是默認登陸shell,如何改變指定用戶的登陸shell

答:在Linux操做系統,「/bin/bash」是默認登陸shell,是在建立用戶時分配的。使用chsh命令能夠改變默認的shell。示例以下所示:shell

3 能夠在shell腳本中使用哪些類型的變量?

答:在shell腳本,咱們可使用兩種類型的變量:express

  • 系統定義變量bash

  • 用戶定義變量數據結構

系統變量是由系統系統本身建立的。這些變量一般由大寫字母組成,能夠經過「set」命令查看。編輯器

用戶變量由系統用戶來生成和定義,變量的值能夠經過命令「echo $<變量名>」查看。函數

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

答:這裏有兩個方法來實現:測試

方法一:spa

2>&1 (# ls /usr/share/doc > out.txt 2>&1 )操作系統

方法二:

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

5 shell腳本中「if」語法如何嵌套?

答:基礎語法以下:

6 shell腳本中「$?」標記的用途是什麼?

答:在寫一個shell腳本時,若是你想要檢查前一命令是否執行成功,在if條件中使用「$?」能夠來檢查前一命令的結束狀態。簡單的例子以下:

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

7 在shell腳本中如何比較兩個數字 ?

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

8 shell腳本中break命令的做用 ?

答:break命令一個簡單的用途是退出執行中的循環。咱們能夠在while和until循環中使用break命令跳出循環。

9 shell腳本中continue命令的做用 ?

答:continue命令不一樣於break命令,它只跳出當前循環的迭代,而不是整個循環。continue命令不少時候是頗有用的,例如錯誤發生,但咱們依然但願繼續執行大循環的時候。

10 告訴我shell腳本中Case語句的語法 ?

答:基礎語法以下:

11 shell腳本中while循環語法 ?

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

 

12 如何使腳本可執行 ?

答:使用chmod命令來使腳本可執行。例子以下:

# chmod a+x myscript.sh

13 「#!/bin/bash」的做用 ?

答:#!/bin/bash是shell腳本的第一行,稱爲釋伴(shebang)行。這裏#符號叫作hash,而! 叫作 bang。它的意思是命令經過 /bin/bash 來執行。

14 shell腳本中for循環語法 ?

答:for循環的基礎語法:

 

15 如何調試shell腳本 ?

答:使用’-x’參數(sh -x myscript.sh)能夠調試shell腳本。另外一個種方法是使用‘-nv’參數( sh -nv myscript.sh)。

16 shell腳本如何比較字符串?

答:test命令能夠用來比較字符串。測試命令會經過比較字符串中的每個字符來比較。

17 Bourne shell(bash) 中有哪些特殊的變量 ?

答:下面的表列出了Bourne shell爲命令行設置的特殊變量。

 

18 在shell腳本中,如何測試文件 ?

答:test命令能夠用來測試文件。基礎用法以下表格:

 

19 在shell腳本中,如何寫入註釋 ?

答:註釋能夠用來描述一個腳本能夠作什麼和它是如何工做的。每一行註釋以#開頭。例子以下:

20 如何讓 shell 就腳本獲得來自終端的輸入?

答:read命令能夠讀取來自終端(使用鍵盤)的數據。read命令獲得用戶的輸入並置於你給出的變量中。例子以下:

21 如何取消變量或取消變量賦值 ?

答:「unset」命令用於取消變量或取消變量賦值。語法以下所示:

# unset <Name_of_Variable>

22 如何執行算術運算 ?

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

使用expr命令(# expr 5 + 2) 2.用一個美圓符號和方括號($[ 表達式 ])例如:test=$[16 + 4] ; test=$[16 + 4]

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

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

do { statements } while (condition)

24 在shell腳本如何定義函數呢 ?

答:函數是擁有名字的代碼塊。當咱們定義代碼塊,咱們就能夠在咱們的腳本調用函數名字,該塊就會被執行。示例以下所示:

$ diskusage () { df -h ; }

25 如何在shell腳本中使用BC(bash計算器) ?

答:使用下列格式,在shell腳本中使用bc:

variable=`echo 「options; expression」 | bc`

26 在shell腳本成功執行前,如何中斷腳本執行?

咱們須要使用‘exit’命令來實現以上描述的情境。‘exit’命令被強制輸出非0值時,腳本會報錯並退出。在Unix環境下的shell腳本中,0值表示成功執行。所以,在腳本終止前執行一個不帶引號的‘exit -1’命令將使腳本停止。

#!/bin/bash echo "Hello" exit -1
echo "bye"

27 如何使用Linux命令來移除文件頭?

當咱們須要刪除文件中的指定行時,‘sed’命令能夠用來解決該問題。下面是用來刪除文件頭(文件的首行)的正確命令。

# 內建的‘-i’開關就不須要重定向符
sed -i '1 d' file.txt

28 你怎麼檢查一個文本文件中某一行的長度?

‘sed -n ‘n p’ file.txt’能夠解決,這裏‘n’表示行號,‘p’打印出匹配內容(到標準輸出),該命令一般與-n命令行選項連用。那麼,怎樣來獲取長度計數呢?很明顯,咱們須要經過管道輸出給‘wc’命令來計算。

# sed -n '5 p' tecmint.txt | wc -c

29 能夠在Linux系統上查看到全部非打印字符嗎?你是怎麼作到的?

能夠。能夠在Linux中查看全部的非打印字符。要實現上面所講的方案,咱們須要‘vi’編輯器的幫助。 怎樣在‘vi’編輯器中顯示非打印字符?

  • 打開vi編輯器。
  • 先按[esc]鍵,而後按‘:’進入到vi編輯器的命令模式。
  • 最後,從‘vi’編輯器的命令界面輸入set list命令並執行。

30 假如你是一個員工組的團隊領導,爲xyz公司工做。公司要求你建立一個‘dir_xyz’目錄,讓該組成員都能在該目錄下建立或訪問文件,可是除了文件建立者以外的其餘人不能刪除文件,你會怎麼作?

# mkdir dir_xyz # chmod g+wx dir_xyz # chmod +t dir_xyz

第一行命令建立了一個目錄(dir_xyz),上面的第二行命令讓組(g)具備‘寫’和‘執行’的權限,而上面的最後一行命令——權限位最後的‘+t’是‘粘滯位’,它用來替換‘x’,代表在這個目錄中,文件只能被它們的擁有者、目錄的擁有者或者是超級用戶root刪除。

31 你能告訴我一個Linux進程經歷的各個階段嗎?

一個Linux進程在它的一輩子中,一般經歷了四個主要階段。

  • 等待:Linux進程等待資源。
  • 運行:Linux進程當前正在執行中。
  • 中止:Linux進程在成功執行後或收到殺死進程信號後中止。
  • 殭屍:若是該進程已經結束,但仍然留在進程表中,被稱爲‘殭屍’。

32 Linux中cut命令怎麼用?

'cut’是一個頗有用的Linux命令,當咱們要截取文件的指定部分並打印到標準輸出,當文本區域以及文件自己很大時,這個命令頗有用。

-b:僅顯示行中指定直接範圍的內容;

-c:僅顯示行中指定範圍的字符;

-d:指定字段的分隔符,默認的字段分隔符爲「TAB」;

-f:顯示指定字段的內容;

-n:與「-b」選項連用,不分割多字節字符;
# cut -c1-10 txt_tecmint
# cut -d;-f2 -f5 -f7 txt_tecmint

33 cmp’和‘diff’命令的區別是什麼?

‘cmp’和‘diff’命令用來獲取相同的東西,但各有側重。diff’命令輸出爲了使兩個文件同樣而應該作的修改。而‘cmp’命令則將兩個文件逐字節對比,並報告第一個不匹配的項。

34 能夠用‘echo’命令來替換‘ls’命令嗎?

能夠的。‘ls’命令能夠用‘echo’命令來替代。‘ls’命令列出目錄內容,從替換上述命令的角度講,咱們可使用‘echo *’,兩個命令的輸出徹底同樣。

35 你可能聽過inode吧。你能簡要描述一下inode嗎?

inode’是一個‘數據結構’,在Linux上用於文件標識。每一個文件在Unix系統上有一個獨立的‘inode’和一個‘惟一的’inode號。

相關文章
相關標籤/搜索