shell腳本面試真題
Ⅰ 9個實戰及面試常用Shell腳本編寫
實戰必備,面試加分!</ 了解如何編寫高效、清晰的Shell腳本,讓它們成為你技能庫中的寶貴財富。下面,我們將深入探討9個實用場景,每個腳本都經過精心設計,旨在提升你的編程技巧和面試表現。
1. 前置准備</
確保腳本的正確執行,從一開始就註明解釋器:#!/bin/bash。保持良好的編程習慣,使用四個空格進行縮進,每行代碼後添加註釋,清晰表達功能。
2. 變數管理</
變數命名有講究:全局變數首字母大寫,如MY_GLOBAL_VAR;局部變數首字母小寫,如myLocalVar。函數名保持小寫,反映其功能,如color_output。
3. 調試利器</
在調試過程中,使用set -e確保非零退出,遇到錯誤立即停止。而set -x則能列印執行過程,幫助你追蹤問題。
4. 實用腳本示例</
- 隨機字元串與數字生成</: random_string.sh與random_number.sh,生成8位的隨機字元串和數字。
- 顏色輸出函數</: color_output.sh,增加腳本輸出的可讀性。
- 批量管理用戶</: 創建新用戶的簡潔腳本。
5. 系統管理監控</
- 軟體包檢查</: 確保關鍵服務已安裝的便捷工具。
- 服務狀態檢查</: 用Shell快速查看服務運行狀況。
- 主機存活狀態檢測</: 採用多種方法檢測網路可達性,如ping失敗計數。
6. 性能監控</
- CPU利用</: 使用vmstat深入分析。
- 內存監控</: 保持內存使用在合理范圍內。
- 硬碟監控</: 實時監控磁碟使用情況。
7. 磁碟監控批量部署</: 通過配置文件,批量監控多台主機的磁碟。
8. 網站可用性檢查</
- URL健康檢查</: 對網站進行快速驗證。
- 連續檢測</: 通過類似ping的邏輯,確保網站穩定可訪問。
結語</
以上腳本實戰性強,不僅適用於日常運維,也是面試中常被問及的內容。記住,學習編程不僅要動手寫,還要理解背後的邏輯。通過實踐,你將真正掌握Shell腳本的強大。祝你在學習和面試中取得成功!
Ⅱ 現在很多企業招會linux shell腳本編程的人,請問都要用Linux shell做一些什麼工作啊
SHELL編程一方面做開發,設計一些LINUX平台的工具,一方面用SHELL做腳本是為了伺服器的日常管理,可以批量化自動管理,解決了手工管理的煩瑣,開發方面不太了解,管理方便就是編寫腳本,裡面一般都是些LINUX的命令語句和變數,可以加入到計劃任務,然後到某個時候開始執行腳本做你想要的操作,不需要你沒個時刻都要去自己手工做了
Ⅲ 經典的shell腳本面試題
經典的Shell腳本面試題答案概要:
在Shell腳本面試中,面試官通常會考察基礎的腳本操作和理解。以下是一些關鍵知識點的簡要概述:
1. 參數傳遞:腳本通過命令行參數傳遞,如`$1`、`$2`等。例如,復制文件腳本會使用`$1`源文件名和`$2`目標地址。
2. 參數使用:獲取命令行參數後,可以進行計算或操作,如復制文件、計算數字等。
3. 腳本名稱獲取:使用`$0`獲取腳本名稱。
4. 命令檢查:`$?`檢查前一個命令的執行狀態。
5. 文件操作:`tail -n 1`獲取文件最後一行,`head -n 1`獲取第一行,`awk`提取特定欄位。
6. 函數定義:通過`function`關鍵字定義函數,如`function add() { sum=$(( $1 + $2 )); }`。
7. 字元串操作:`echo $str1$str2`拼接字元串,`expr`進行整數相加。
8. 文件存在檢查:`test -f file`檢查文件存在。
9. 循環結構:`for`、`while`、`until`循環用於遍歷或條件控制。
10. 腳本解釋:`#!/bin/bash`指定腳本使用的解釋器。
11. 文本文件操作:`sed`或`awk`用於讀取特定行,如第10行。
12. 注釋符號:`#`用於在Shell腳本中添加註釋。
13. 變數操作:`export`使變數在子shell可見,`echo ${var:5}`提取變數的一部分。
14. 輸出重定向:`> log.txt`將輸出重定向到文件,`echo $var | cut -d: -f2`獲取變數的特定部分。
15. 命令理解:`[ -z "$var" ] && echo 0 || echo 1`條件判斷結果。
16. 標准輸入輸出:`cat file.txt`查看內容,`2>&1`合並標准輸出和錯誤。
17. 數組和索引:數組定義、讀取和操作,如`arr=(1 2 3)`和`echo ${arr[0]}`。
18. 輸入獲取:通過命令行參數或`read`命令從用戶接收輸入。
19. 高級功能:`expect`用於自動化互動式任務,如用戶界面操作。
20. 實踐應用:涉及實際場景的問題,如游戲腳本、部署腳本等,展示了Shell腳本的實用性和靈活性。
這些知識點展示了Shell腳本的基礎架構,是面試中常被考察的內容。
Ⅳ 分享70個經典的 Shell 腳本面試題與答案
我們為你的面試准備選擇了 70 個你可能遇到的 shell 腳本面試問題及解答。了解腳本或至少知道基礎知識對系統管理員來說至關重要,它也有助於你在工作環境中自動完成很多任務。在過去的幾年裡,我們注意到所有的 linux 工作職位都要求腳本技能。
1) 如何向腳本傳遞參數 ?
./script argument
例子: 顯示文件名稱腳本
(LCTT 譯註:謝謝某匿名訪客的提醒,原題有誤,修改之。)
2) 如何在腳本中使用參數 ?
第一個參數 : 2
例子 : 腳本會復制文件(arg1) 到目標地址(arg2)
3) 如何計算傳遞進來的參數 ?
4) 如何在腳本中獲取腳本名稱 ?
5) 如何檢查之前的命令是否運行成功 ?
6) 如何獲取文件的最後一行 ?
7) 如何獲取文件的第一行 ?
8) 如何獲取一個文件每一行的第三個元素 ?
9) 假如文件中每行第一個元素是 FIND,如何獲取第二個元素
10) 如何調試 bash 腳本
將 -xv 參數加到 #!/bin/bash 後
例子:
11) 舉例如何寫一個函數 ?
12) 如何向連接兩個字元串 ?
輸出
HelloWorld
13) 如何進行兩個整數相加 ?
輸出
3
據 @kashu 的意見,本題的更佳回答為:
兩個整數相加,還有若干種方法實現:
14) 如何檢查文件系統中是否存在某個文件 ?
15) 寫出 shell 腳本中所有循環語法 ?
for 循環 :
while 循環 :
until 循環 :
16) 每個腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什麼意思 ?
這一行說明要使用的 shell。#!/bin/bash 表示腳本使用 /bin/bash。對於 python 腳本,就是
17) 如何獲取文本文件的第 10 行 ?
18) bash 腳本文件的第一個符號是什麼
19) 命令:[ -z "" ] && echo 0 || echo 1 的輸出是什麼
20) 命令 「export」 有什麼用 ?
21) 如何在後台運行腳本 ?
在腳本後面添加 「&」。
據 @kashu 的意見,更好的答案是:
大部分時間我們可能是遠程使用Linux,我碰到過由於網路斷線使得在後台運行的command &沒了...
22) "chmod 500 script" 做什麼 ?
使腳本所有者擁有可執行許可權。
23) ">" 做什麼 ?
重定向輸出流到文件或另一個流。
24) & 和 && 有什麼區別
25) 什麼時候要在 [ condition ] 之前使用 「if」 ?
當條件滿足時需要運行多條命令的時候。
26) 命令: name=John && echo 'My name is $name' 的輸出是什麼
variable
27) bash shell 腳本中哪個符號用於注釋 ?
28) 命令: echo ${new:-variable} 的輸出是什麼
variable
29) ' 和 " 引號有什麼區別 ?
30) 如何在腳本文件中重定向標准輸出和標准錯誤流到 log.txt 文件 ?
在腳本文件中添加 "exec >log.txt 2>&1" 命令。
31) 如何只用 echo 命令獲取字元串變數的一部分 ?
例子:
32) 如果給定字元串 variable="User:123:321:/home/dir",如何只用 echo 命令獲取 home_dir ?
或
33) 如何從上面的字元串中獲取 「User」 ?
或
34) 如何使用 awk 列出 UID 小於 100 的用戶 ?
35) 寫程序為用戶計算主組數目並顯示次數和組名
36) 如何在 bash shell 中更改標準的域分隔符為 ":" ?
37) 如何獲取變數長度 ?
38) 如何列印變數的最後 5 個字元 ?
39) {variable: -10} 有什麼區別?
40) 如何只用 echo 命令替換字元串的一部分 ?
41) 哪個命令將命令替換為大寫 ?
42) 如何計算本地用戶數目 ?
43) 不用 wc 命令如何計算字元串中的單詞數目 ?
44) "export $variable" 或 "export variable" 哪個正確 ?
45) 如何列出第二個字母是 a 或 b 的文件 ?
46) 如何將整數 a 加到 b 並賦值給 c ?
或
或
47) 如何去除字元串中的所有空格 ?
48) 重寫這個命令,將輸出變數轉換為復數: item="car"; echo "I like $item" ?
49) 寫出輸出數字 0 到 100 中 3 的倍數(0 3 6 9 …)的命令 ?
或
50) 如何列印傳遞給腳本的所有參數 ?
或
51) [ b ] 和 [ b ] 有什麼區別
52) = 和 == 有什麼區別
53) 寫出測試 $a 是否大於 12 的命令 ?
[ $a -gt 12 ]
54) 寫出測試 $b 是否小於等於 12 的命令 ?
[ $b -le 12 ]
55) 如何檢查字元串是否以字母 "abc" 開頭 ?
[[ $string == abc* ]]
56) [[ string == "abc " ]] 有什麼區別*
57) 如何列出以 ab 或 xy 開頭的用戶名 ?
egrep " ab| xy" /etc/passwd|cut -d: -f1
58) bash 中 $! 表示什麼意思 ?
後台最近執行命令的 PID.
59) $? 表示什麼意思 ?
前台最近命令的結束狀態。
60) 如何輸出當前 shell 的 PID ?
echo $$
61) 如何獲取傳遞給腳本的參數數目 ?
echo $#
(LCTT 譯註:和第3題重復了。)
62) @ 有什麼區別
63) 如何在 bash 中定義數組 ?
64) 如何列印數組的第一個元素 ?
65) 如何列印數組的所有元素 ?
66) 如何輸出所有數組索引 ?
67) 如何移除數組中索引為 2 的元素 ?
68) 如何在數組中添加 id 為 333 的元素 ?
69) shell 腳本如何獲取輸入的值 ?
a) 通過參數
b) 通過 read 命令
70) 在腳本中如何使用 "expect" ?