q1: shell指令碼是什麼、它是必需的嗎?
答:乙個shell指令碼是乙個文字檔案,包含乙個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以新增這些所有命令在乙個文字檔案(shell指令碼)來完成這些日常工作任務。
q2: 什麼是預設登入shell,如何改變指定使用者的登入shell?
答:在linux作業系統,「/bin/bash」是預設登入shell,是在建立使用者時分配的。使用chsh命令可以改變預設的shell。
語法: chsh -s
示例:
q3: 可以在shell指令碼中使用哪些型別的變數?
答:在shell指令碼,我們可以使用兩種型別的變數:
系統變數
使用者定義變數
系統變數是由系統自己建立的。這些變數通常由大寫字母組成,可以通過「set」命令檢視。
使用者變數由系統使用者來生成和定義,變數的值可以通過命令「echo $《變數名》」檢視
[root@localhost ~]# set she="shedong"
[root@localhost ~]# echo $she
[root@localhost ~]# export she="shedong"
[root@localhost ~]# echo $she
shedong
export乙個環境變數,光宣告了不能用,必須export一下
q4: 如何將標準輸出和錯誤輸出同時重定向到同乙個位置?
答: 這裡有兩個方法可以實現
方法一:
[root@localhost doc]# ls /usr/share/doc/ > out.txt 2>&1
方法二:
[root@localhost ~]# ls /usr/share/doc/ &> out.txt
q5:shell指令碼中「if」語法如何巢狀?
答:基礎語法如下:
if then
command1
command2 ……
ifthen
command1
command2 ……
else
command1
command2 ……
fi fi
q6:shell指令碼中的「$?」標記的用途是什麼?
答:在寫乙個shell指令碼時,如果你想要檢查前乙個命令是否執行成功,在if條件中使用「$?」可以檢查前一命令的結束狀態。
示例如下:
[root@localhost ~]# ls /mnt
she[root@localhost ~]# echo $?
0[root@localhost ~]# ls /usr/bin/share
ls: /usr/bin/share: no such file or directory
[root@localhost ~]# echo $?2
如果結束狀態是0,說明前乙個命令執行成功
如果結束狀態不是0,說明命令執行是失敗的。
q7:在shell指令碼中如何比較兩個數字?
答:在if-then中使用測試命令(-gt等)來比較兩個數字,例子如下:
[root@localhost ~]# cat compare.sh
#!/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[root@localhost ~]# sh compare.sh
y is greater than x
q8:shell指令碼中break命令的作用?
答:break命令乙個簡單的用途是推執行中的迴圈。我們可以在while和until迴圈中使用break命令來挑出迴圈。
q9:shell指令碼中continue命令的作用?
答:continue命令不同於break命令 ,它只跳出當前迴圈的迭代,而不是整個迴圈。continue命令很多時候是很有用的,例如錯誤發生,但我們依然希望繼續執行大迴圈的時候。
q10:告訴我shell指令碼中case語句的語法?
答:基礎語法如下:
case word in
value1
command1
command2 ……
last_command !!
value2
command1
command2 ……
last_command ;;
esac
q11:shell指令碼中while迴圈語法?
答:如同for迴圈,while迴圈只要條件成立就重複它的命令塊。不同於for迴圈,while迴圈會不斷迭代,直到它的條件不為真。
基礎語法:
while [test-condition ] do
commands……
done
q12:如何使指令碼可執行?
答:使用chmod命令來使指令碼可執行。例如
[root@localhost ~]# chmod a+x compare.sh
q13:「#!/bin/bash」的作用?
答:#!/bin/bash是shell指令碼的第一行,成為釋伴(shebang)行。這裡#符號叫做hash,而!叫做bang。它的意思是命令通過/bin/bash來執行。
這一行總體的意思是表明你使用哪款shell來解釋以下你寫的**。
q14:shell指令碼中for迴圈語法?
答:for迴圈的基礎語法:
for variables in list_of_items do
command1
command2 ……
last_command
done
q15:如何除錯shell指令碼?
答:使用『-x』引數(sh -x compare.sh)可以除錯shell指令碼。另一種方法是使用『-nv』引數 (sh -nv compare.sh)。
q16:在shell指令碼中,如何寫入注釋?
答:注釋可以用來描述乙個指令碼可以做什麼和它是如何工作的。每一行注釋以#開頭。例子如下:
[root@localhost ~]# cat compare.sh
#!/bin/bash
#this is a sample!
x=10
y=20
if [ $x -gt $y ]
then
echo "x is greater than y"
else
echo "y is greater than x"fi
q17:如何讓shell指令碼得到來自終端的輸入?
答:read命令可以讀取來自終端(使用鍵盤)的資料。read命令得到使用者的輸入並置於你給出的變數中。例子如下:
[root@localhost tmp]# cat test.sh
#!/bin/bash
echo 'please enter your name'
read name
echo "my name is $name"
[root@localhost tmp]# sh test.sh
please enter your name
xiaoming
my name is xiaoming
q18:如何取消變數或取消變數賦值?
答:unset 命令用於取消變數或取消變數賦值。語法如下所示:
[root@localhost tmp]# echo $she
shedong
[root@localhost tmp]# unset she
[root@localhost tmp]# echo $she
q19:如何執行算數運算?
答:有兩種方法來執行算數運算:
1.使用expr命令(# expr 5 + 2)
2.用乙個美元符號和方括號 $[ 5+2 ]
[root@localhost tmp]# expr 5 + 27
[root@localhost tmp]# test=$[5 + 2]
[root@localhost tmp]# echo $test7
q20:do-while語句的基本格式?
答:do-while語句類似於while語句,但檢查條件語句之前先執行命令(即至少執行一次)。下面是do-while語句的語法 do
while (condition)
面試常用指令碼
1 使用shell,建立class1 使用者組,再批量建立stu1 stu30 的使用者,並指定使用者組為 class1。vi autoaddusr usr bin php q exec groupadd class1 for i 1 i 30 i chmod x autoaddusr autoad...
Linux Shell指令碼面試25問
答 乙個shell指令碼是乙個文字檔案,包含乙個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以新增這些所有命令在乙個文字檔案 shell指令碼 來完成這些日常工作任務。答 在linux作業系統,bin bash 是預設登入shell,是在建立使用者時分配的。使用chsh...
Shell 指令碼面試問題大全
我們為你的面試準備選擇了 70 個你可能遇到的 shell 指令碼面試問題及解答。了解指令碼或至少知道基礎知識對系統管理員來說至關重要,它也有助於你在工作環境中自動完成很多任務。在過去的幾年裡,我們注意到所有的 linux 工作職位都要求指令碼技能。script argument例子 顯示檔名稱指令...