Linux中國

Linux Shell腳本的10個有用的「面試問題和解答」

我們為各類用戶提供了關於Shell腳本語言和面試問題的很多教程,可以訪問以下鏈接去閱讀這些文章。

在此,作為shell腳本的附加內容,在本文中我們將從面試的角度解讀與Linux Shell相關的問題。

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

解答:我們需要使用『exit』命令來實現以上描述的情境。『exit』命令被強制輸出非0值時,腳本會報錯並退出。在Unix環境下的shell腳本中,0值表示成功執行。因此,在腳本終止前執行一個不帶引號的『exit -1』命令將使腳本中止。

例如,創建以下一個名為「anything.sh」的腳本。

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

保存文件並執行。

# sh anything.sh

Hello
exit.sh: 3: exit: Illegal number: -1

從上面的腳本中可以清楚地看到,在exit -1命令前,腳本執行得很好。

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

解答:當我們需要刪除文件中的指定行時,『sed』命令可以用來解決該問題。

這個是用來刪除文件頭(文件的首行)的正確命令。

# sed '1 d' file.txt

上面命令的問題是,它會在標準輸出設備上輸出不帶首行的文件內容。為了保存輸出到文件,我們需要使用重定向操作符,它將幫助你將輸出重定向到文件。

# sed '1 d' file.txt > new_file.txt

好吧,其實sed命令內建的『-i』開關就可以干這活,就不需要重定向符了吧。

# sed -i '1 d' file.txt

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

解答:『sed』命令也可以用來查找文本文件中的某一行或者檢查其長度。

sed -n 『n p』 file.txt』可以解決,這裡『n』表示行號,『p』列印出匹配內容(到標準輸出),該命令通常與-n命令行選項連用。那麼,怎樣來獲取長度計數呢?很明顯,我們需要通過管道輸出給『wc』命令來計算。

# sed –n 'n p' file.txt | wc –c

要得到文本文件『tecmint.txt』的第五行的長度,運行如下命令:

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

4. 可以在Linux系統上查看到所有非列印字元嗎?你是怎麼做到的?

解答:可以。可以在Linux中查看所有的非列印字元。要實現上面所講的方案,我們需要『vi』編輯器的幫助。 怎樣在『vi』編輯器中顯示非列印字元?

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

: 這種方式可以查看文本文件中的所有非列印字元,包括ctrl+m(^M)

5. 假如你是一個員工組的團隊領導,為xyz公司工作。公司要求你創建一個『dir_xyz』目錄,讓該組成員都能在該目錄下創建或訪問文件,但是除了文件創建者之外的其他人不能刪除文件,你會怎麼做?

解答:這真是個有趣的工作方案。好吧,上面所講的方案,我們需要通過下面的步驟來實施,這簡直就是小菜一碟。

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

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

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

解答:一個Linux進程在它的一生中,通常經歷了四個主要階段。

這裡是Linux進程要經歷的四個階段。

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

7. Linux中cut命令怎麼用?

解答:『cut』是一個很有用的Linux命令,當我們要截取文件的指定部分並列印到標準輸出,當文本區域以及文件本身很大時,這個命令很有用。

例如,截取『txt_tecmint』文件的前10列。

# cut -c1-10 txt_tecmint

要截取該文件中的第二,第五和第七列。

# cut -d;-f2 -f5 -f7 txt_tecmint

8. 『cmp』和『diff』命令的區別是什麼?

解答:『cmp』和『diff』命令用來獲取相同的東西,但各有側重。

diff』命令輸出為了使兩個文件一樣而應該做的修改。而『cmp』命令則將兩個文件逐位元組對比,並報告第一個不匹配的項。

9. 可以用『echo』命令來替換『ls』命令嗎?

解答:可以的。『ls』命令可以用『echo』命令來替代。『ls』命令列出目錄內容,從替換上述命令的角度講,我們可以使用『echo *』,兩個命令的輸出完全一樣。

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

解答:『inode』是一個『數據結構』,在Linux上用於文件標識。每個文件在Unix系統上有一個獨立的『inode』和一個『唯一的』inode號。

到此為止吧。在下一篇文章中,我們將討論另外一些有趣味性而又有知識性的面試問題。到那時,別跑開,請上Tecmint.com,別忘了在下面的評論部分給我們提供一些有價值的反饋哦。

via: http://www.tecmint.com/interview-questions-on-shell-scripting/

譯者:GOLinux 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國