面試 Linux 運維一定會問到的24個問題,還不趕緊備下!
雖然現在Python在運維工作中已經使用很普遍,但是很多企業在找Linux雲端計算工程師的時候還是會問到 shell 指令碼的問題,它有助於你在工作環境中自動完成很多工。
如下是一些面試過程中,經常會遇到的 shell 指令碼面試問題及解答:
Q1Shell指令碼是什麼、它是必需的嗎?
答:一個Shell指令碼是一個文字檔案,包含一個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以新增這些所有命令在一個文字檔案(Shell指令碼)來完成這些日常工作任務。
Q2什麼是預設登入shell,如何改變指定使用者的登入shell
答:在Linux作業系統,“/bin/bash”是預設登入shell,是在建立使用者時分配的。使用chsh命令可以改變預設的shell。示例如下所示:
# chsh <使用者名稱> -s <新shell>
# chsh linuxtechi -s /bin/sh
Q3可以在shell指令碼中使用哪些型別的變數?
答:在shell指令碼,我們可以使用兩種型別的變數:
系統定義變數
使用者定義變數
系統變數是由系統系統自己建立的。這些變數通常由大寫字母組成,可以通過“set”命令檢視。
使用者變數由系統使用者來生成和定義,變數的值可以通過命令“echo $<變數名>”檢視。
Q4如何將標準輸出和錯誤輸出同時重定向到同一位置?
答:這裡有兩個方法來實現:
方法一:
2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )
方法二:
&> (如# ls /usr/share/doc &> out.txt )
Q5shell指令碼中“if”語法如何巢狀?
答:基礎語法如下:
if [ 條件 ]
then
命令1
命令2
…..
else
if [ 條件 ]
then
命令1
命令2
….
else
命令1
命令2
…..
fi
fi
Q6shell指令碼中“$?”標記的用途是什麼?
答:在寫一個shell指令碼時,如果你想要檢查前一命令是否執行成功,在if條件中使用“$?”可以來檢查前一命令的結束狀態。簡單的例子如下:
root@localhost:~# ls /usr/bin/shar
/usr/bin/shar
root@localhost:~# echo $?
0
如果結束狀態是0,說明前一個命令執行成功。
root@localhost:~# ls /usr/bin/share
ls: cannot access /usr/bin/share: No such file or directory
root@localhost:~# echo $?
2
如果結束狀態不是0,說明命令執行失敗。
Q7在shell指令碼中如何比較兩個數字 ?
答:在if-then中使用測試命令( -gt 等)來比較兩個數字,例子如下:
#!/bin/bash
x=10
y=20
if [ $x -gt $y ]
then
echo “x is greater than y”
else
echo “y is greater than x”
fi
Q8shell指令碼中break命令的作用 ?
答:break命令一個簡單的用途是退出執行中的迴圈。我們可以在while和until迴圈中使用break命令跳出迴圈。
Q9shell指令碼中continue命令的作用 ?
答:continue命令不同於break命令,它只跳出當前迴圈的迭代,而不是整個迴圈。continue命令很多時候是很有用的,例如錯誤發生,但我們依然希望繼續執行大迴圈的時候。
Q10告訴我shell指令碼中Case語句的語法 ?
答:基礎語法如下:
case 變數 in
值1)
命令1
命令2
…..
最後命令
!!
值2)
命令1
命令2
……
最後命令
;;
esac
Q11shell指令碼中while迴圈語法 ?
答:如同for迴圈,while迴圈只要條件成立就重複它的命令塊。不同於for迴圈,while迴圈會不斷迭代,直到它的條件不為真。基礎語法:
while [ 條件 ]
do
命令…
done
Q12如何使指令碼可執行 ?
答:使用chmod命令來使指令碼可執行。例子如下:
# chmod a+x myscript.sh
Q13“#!/bin/bash”的作用 ?
答:#!/bin/bash是shell指令碼的第一行,稱為釋伴(shebang)行。這裡#符號叫做hash,而! 叫做 bang。它的意思是命令通過 /bin/bash 來執行。
Q14shell指令碼中for迴圈語法 ?
答:for迴圈的基礎語法:
for 變數 in 迴圈列表
do
命令1
命令2
….
最後命令
done
Q15如何除錯shell指令碼 ?
答:使用'-x'引數(sh -x myscript.sh)可以除錯shell指令碼。另一個種方法是使用‘-nv’引數( sh -nv myscript.sh)。
Q16shell指令碼如何比較字串?
答:test命令可以用來比較字串。測試命令會通過比較字串中的每一個字元來比較。
Q17Bourne shell(bash) 中有哪些特殊的變數 ?
答:下面的表列出了Bourne shell為命令列設定的特殊變數。
內建變數 解釋
$0 命令列中的指令碼名字
$1 第一個命令列引數
$2 第二個命令列引數
….. …….
$9 第九個命令列引數
$# 命令列引數的數量
$* 所有命令列引數,以空格隔開
Q18在shell指令碼中,如何測試檔案 ?
答:test命令可以用來測試檔案。基礎用法如下表格:
Test 用法
-d 檔名 如果檔案存在並且是目錄,返回true
-e 檔名 如果檔案存在,返回true
-f 檔名 如果檔案存在並且是普通檔案,返回true
-r 檔名 如果檔案存在並可讀,返回true
-s 檔名 如果檔案存在並且不為空,返回true
-w 檔名 如果檔案存在並可寫,返回true
-x 檔名 如果檔案存在並可執行,返回true
Q19在shell指令碼中,如何寫入註釋 ?
答:註釋可以用來描述一個指令碼可以做什麼和它是如何工作的。每一行註釋以#開頭。例子如下:
#!/bin/bash
# This is a command
echo “I am logged in as $USER”
Q20如何讓 shell 就指令碼得到來自終端的輸入?
答:read命令可以讀取來自終端(使用鍵盤)的資料。read命令得到使用者的輸入並置於你給出的變數中。例子如下:
# vi /tmp/test.sh
#!/bin/bash
echo ‘Please enter your name’
read name
echo “My Name is $name”
# ./test.sh
Please enter your name
LinuxTechi
My Name is LinuxTechi
Q21如何取消變數或取消變數賦值 ?
答:“unset”命令用於取消變數或取消變數賦值。語法如下所示:
# unset <變數名>
Q22如何執行算術運算 ?
答:有兩種方法來執行算術運算:
1.使用expr命令(# expr 5 + 2)
2.用一個美元符號和方括號($[ 表示式 ])
例如:test=$[16 + 4] ; test=$[16 + 4]
Q23do-while語句的基本格式 ?
答:do-while語句類似於while語句,但檢查條件語句之前先執行命令(LCTT 譯註:意即至少執行一次。)。下面是用do-while語句的語法
do
{
命令
} while (條件)
Q24在shell指令碼如何定義函式呢 ?
答:函式是擁有名字的程式碼塊。當我們定義程式碼塊,我們就可以在我們的指令碼呼叫函式名字,該塊就會被執行。示例如下所示:
$ diskusage () { df -h ; }
譯註:下面是我給的shell函式語法,原文沒有
[ function ] 函式名 [()]
{
命令;
[return int;]
}
原文出處:linuxtechi,譯文出處:LCTT
譯文連結:http://linux.cn/article-5311-1.html
雲端計算免費課程火熱開講中,5天運維經典課程免費學,會雲端計算的運維人才到底需要掌握哪些技術,未來前景發展怎麼樣?跟隨行業大咖一起剖根究底,點選文末“閱讀原文”或長按下方二維碼即可報名免費課程!抓住免費學習的機會,逆襲2019~~
PS:記得查收小編送你的免費大禮包呦~
福利 | 一萬多套PPT模板等你免費來拿!無條件領取!
免費送 | 1000多套簡歷模板免費拿,附贈簡歷製作教程!
免費領 | 《Shell指令碼 100例》電子書免費拿,運維必備乾貨~
▼▼點選【閱讀原文】,5天運維免費課程,開講在即!
相關文章
- 邦芒面試:面試99%會被問到的問題,你一定要知道面試
- 運維必備Linux學習day3(面試常問的linux指令)運維Linux面試
- 離譜!面試為啥都問Redis?趕緊補一下面試Redis
- 面試一定會問到的-js事件迴圈面試JS事件
- 24 個必知必會的系統管理員面試問題面試
- 20道你必須要背會的微服務面試題,面試一定會被問到微服務面試題
- Linux系統運維面試題,Linux運維經典面試題講解Linux運維面試題
- 大廠面試Kafka,一定會問到的冪等性面試Kafka
- 四個常見的Linux面試問題Linux面試
- 24個必須掌握的資料庫面試問題~資料庫面試
- IOS面試經常被問到的問題iOS面試
- Linux運維必會的100道MySql面試題之(三)Linux運維MySql面試題
- 快2020年了,趕緊收藏起MongoDB面試題輕鬆面對BAT靈魂式的拷問MongoDB面試題BAT
- Linux運維工程師 50個常見面試題Linux運維工程師面試題
- 邦芒面試:這10個問題都答不上來,你還想透過面試?面試
- 不會吧不會吧,還有開發不會Java填充PDF模板資料的,趕緊看看吧Java
- Python面試最常問的10個問題Python面試
- 面試必備問題集錦面試
- 掌握運維必備技能--問題故障定位運維
- 49個Spring經典面試題總結,附帶答案,趕緊收藏Spring面試題
- 【Linux運維教程】Linux命令面試的簡答題(三)!Linux運維面試
- 70個經典面試問題,有備無患~面試
- Python面試必備的7大問題Python面試
- 詢問面試官的面試問題面試
- 邦芒面試:面試時要問清楚的幾個問題面試
- 前端面試中可能會問到的問題(一)前端面試
- 初級運維必備掌握面試題目運維面試題
- 3年Java工程師面試必問!這些題一定要會!Java工程師面試
- 【乾貨分享】面試軟體測試工程師會被問到哪些問題?面試工程師
- Linux運維工程師面試題之一Linux運維工程師面試題
- 面試官常問的位運算問題總結面試
- Android JVM面試專題:阿里100%會問到的JVM,20道靈魂質問面試題解析,讓你吊打面試官AndroidJVM阿里面試題
- 大廠Android面試,居然還問這些問題!Android面試
- 面試官常問的Nginx的幾個問題面試Nginx
- 2019年常見的Linux面試題及答案解析,哪些你還不會?Linux面試題
- Java 進階面試問題必備Java面試
- 面試了一個 5 年 Java 程式設計師,一個問題也不會。。面試Java程式設計師
- 跳槽時,這些Java面試題99%會被問到Java面試題