寫一個指令碼:
1、建立目錄/tmp/scripts
2、切換工作目錄至此目錄中
3、複製/etc/pam.d目錄至目前的目錄,並重命令為test
4、將目前的目錄中的test及其裡面的檔案和子目錄的屬主改為redhat
5、將test及其子目錄中的檔案的其它使用者的許可權改為沒有任何許可權
寫一個指令碼:
1、顯示當前系統日期和時間,而後建立目錄/tmp/lstest
2、切換工作目錄至/tmp/lstest
3、建立目錄a1d, b56e, 6test
4、建立空檔案xy, x2y, 732
5、列出目前的目錄下以a、x或者6開頭的檔案或目錄;
6、列出目前的目錄下以字母開頭,後跟一個任一數字,而後跟任意長度字元的檔案或目錄;
寫一個指令碼,完成以下功能:
1、傳遞兩個整數給指令碼,讓指令碼分別計算並顯示這兩個整數的和、差、積、商
寫一個指令碼:
1、切換工作目錄至/var
2、依次向/var目錄中的每個檔案或子目錄問好,形如:
(提示:for FILE in /var/*; 或for FILE in `ls /var`; )
Hello, log
Hello, run
3、統計/var目錄下共有多個檔案,並顯示出來
寫一個指令碼:
1、設定變數FILE的值為/etc/passwd
2、使用迴圈讀取檔案/etc/passwd的第2,4,6,10,13,15行,並顯示其內容;(提示:LINE=`head -2 /etc/passwd | tail -1`可以取得第2行)
3、把這些行儲存至/tmp/mypasswd檔案中
寫一個指令碼:
1、設定變數FILE的值為/etc/passwd
2、依次向/etc/passwd中的每個使用者問好,形如: (提示:LINES=`wc -l /etc/passwd | cut -d" " -f1`)
Hello, root.
3、統計一共有多少個使用者
寫一個指令碼:
1、設定變數FILE的值為/etc/passwd
2、依次向/etc/passwd中的每個使用者問好,並且說出對方的ID是什麼,形如: (提示:LINES=`wc -l /etc/passwd | cut -d" " -f1`)
Hello, root,your UID is 0.
3、統計一共有多少個使用者
寫一個指令碼:
1、添加10個使用者user1到user10,但要求只有使用者不存在的情況下才能添加;
寫一個指令碼:
1、通過ping命令測試192.168.0.151到192.168.0.254之間的所有主機是否線上,
如果線上,就顯示"ip is up."
如果不線上,就顯示"ip is down."
寫一個指令碼:
1、將/var/目錄下所有檔案的檔案名稱的首字母和尾字母顯示時改為大寫;
寫一個指令碼:
1、將/etc/sysctl.conf檔案中以非#(井號)開頭的行儲存至/tmp/sysctl.conf中
2、如果/tmp/sysctl.conf檔案中net.ipv4.ip_forward的值為0的話,則將其值修改為1
3、按次序逐個顯示等號之前的指令的名字,並在每一個指令名字添加其編號,形如:
1 net.ipv4.ip_forward
2 kernel.sysrq
4、為/tmp/sysctl.conf檔案中的每一行添加註釋,即在每一非空白行之前添加一個以#開頭的行,並儲存至檔案中。內容形如:
# A parameter.
寫一個指令碼:
1、假設某檔案中有如下行:
/etc/inittab
/etc/pam.d/sudo
/usr/share/doc
/usr/local/
/etc/sysconfig/
/var/log/messages
2、取出如上檔案中每一行檔案名稱中不包含路徑的檔案名稱,比如,/etc/inittab的檔案名稱為inittab,/etc/sysconfig/的檔案名稱為sysconfig;
3、把每個檔案名稱的第二個字母顯示時改為大寫;
1、寫一個指令碼:
判斷一個檔案是否存在,如果存在就顯示其存在;
2、寫一個指令碼:
判斷一個檔案是否存在,如果存在就顯示其存在;否則就顯示其不存在;
3、寫一個指令碼:
1)讓使用者通過命令列傳遞一個路徑;
2)判斷:
如果是普通檔案,顯示之;
否則,如果是目錄,顯示之;
否則,如果是連結,顯示之;
否則,顯示無法識別
4、計算100以內所有偶數的和;
5、寫一個指令碼:
判斷使用者輸入的是否為Q或者q,如果是,就顯示”Quting...";否則,就顯示,“Are you crazy?”;
寫一個指令碼:
1、判斷一個指定的指令碼是否是語法錯誤;如果有錯誤,則提醒使用者鍵入Q或者q無視錯誤並退出,其它任何鍵可以通過vim開啟這個指定的指令碼;
2、如果使用者通過vim開啟編輯後儲存退出時仍然有錯誤,則重複第1步中的內容;否則,就正常關閉退出。
寫一個指令碼:
1、要求使用者從鍵盤輸入一個使用者名稱,判斷此使用者是否存在,如果存在,則返回此使用者的預設shell;如果不存在,提示使用者不存在。
2、判斷完成以後不要退出指令碼,而是繼續提示N|n(next)使用者輸入其它使用者名稱以做出下一個判斷,而鍵入其它任一字元可以退出;
寫一個指令碼:
1、向系統中添加20個使用者,名字為linuxer1-linuxer20,密碼分別為其使用者名稱,要使用while迴圈;
2、要求:在添加每個使用者之前事先判斷使用者是否存在,如果已經存在,則不再添加此使用者;
3、添加完成後,顯示linuxer1-linuxer20每個使用者名稱及對應的UID號碼和GID號碼,形如
stu1, UID: 1000, GID: 1000 (此步要求使用awk實現)
寫一個指令碼:
1、掃描192.168.0網段內的主機的線上狀態,但需要提示使用者輸入一段IP位址範圍,方式是指定起始IP和結束IP;顯示結果形如:
The host 192.168.0.1 is UP.
The host 192.168.0.2 is DOWN.
2、使用while迴圈實現;
3、主機線上狀態的輸出結果既要顯示在螢幕上,同時要求所有主機資訊也儲存一份至/tmp/host_state;
4、為/tmp/host_state檔案中所有主機狀態為DOWN的行的行首添加一個#(井號);
5、分別顯示指定範圍內所有線上的主機總數和不線上主機總數;
寫一個指令碼:
顯示當前系統上所有其VSZ段的值大於4000的進程的進程名字、進程號和VSZ值的大小;
寫一個指令碼:
查看redhat使用者是否登入了系統,如果登入了,就通知當前指令碼執行者“redhat is logged on.”;
否則,就睡眠5秒鐘後再次進行測試;直到其登入狀態止退出;
要求:使用until迴圈
寫一個指令碼:
1、提示使用者選擇所要設定的網卡;
2、提示使用者使用dhcp或者static作為選定網卡的BOOTPROTO
a、如果使用者選擇dhcp,則將其設定檔中的BOOTPROTO的值設為dhcp,而後重啟此網卡;
b、如果使用者選擇static,則將其設定檔中的BOOTPROTO的值設為static,並提示使用者輸入IP地址,子網路遮罩和網關;其中網關可以為空白,但IP地址或子網路遮罩不可為空;設定完成後重啟此網卡;
3、無論上述動態或靜態設定,設定完成後將網卡IP地址設定後資訊再次顯示給使用者;
考慮:1、如果使用者沒有做出任何修改之前就不想設定了,如何退出?
2、如果使用者已經設定了一些資訊,如IP地址等卻又不想設定了,而使用了Ctrl+c,如何處置?
寫一個指令碼:
1、掃描192.168.0網段內的主機的線上狀態,但需要提示使用者輸入一段IP位址範圍,方式是指定起始IP和結束IP;顯示結果形如:
The host 192.168.0.1 is UP.
The host 192.168.0.2 is DOWN.
說明:此段要求使用函數實現;
2、使用while迴圈實現;
3、主機線上狀態的輸出結果既要顯示在螢幕上,同時要求所有主機資訊也儲存一份至/tmp/host_state;
4、為/tmp/host_state檔案中所有主機狀態為DOWN的行的行首添加一個#(井號);
5、分別顯示指定範圍內所有線上的主機總數和不線上主機總數;
寫一個指令碼:
1、提示使用者輸入一個使用者名稱;
2、使用函數實現:
判斷一個使用者是否存在,使用者名稱通過參數傳遞而來;
如果存在,就顯示此使用者的shell和UID
如果不存在,就說此使用者不存在;
寫一個指令碼:
1、提示使用者可以輸入”mem"查看本機實體記憶體使用資訊,"swap"顯示虛擬記憶體使用資訊;
2、當使用者輸入mem時,擷取當前主機實體記憶體的大小,已經使用的空間及空閑空間大小;如果已用空間超出總空間的90%,則以紅色字型警告;否則,則以綠色字型顯示空間剩餘百分比;
3、當使用者輸入"swap"時,擷取當前主機虛擬記憶體的大小,已經使用的空間及空閑空間的大小;如果已用空間超出總空間的90%,則以紅色字型警告;否則,則以綠色字型顯示空間剩餘百分比;
4、其它資訊則說明是錯誤輸入;
寫一個指令碼:
1、用一個函數實現擷取當前主機實體記憶體的大小,已經使用的空間及空閑空間大小;如果已用空間超出總空間的90%,則以紅色字型警告;否則,則以綠色字型顯示空間剩餘百分比;
2、用一個函數實現擷取當前主機虛擬記憶體的大小,已經使用的空間及空閑空間的大小;如果已用空間超出總空間的90%,則以紅色字型警告;否則,則以綠色字型顯示空間剩餘百分比;
3、顯示一個提示給使用者,說明輸入mem可以顯示實體記憶體空間使用方式;輸入swap可以顯示虛擬記憶體空間使用方式;其它任一字元提示使用者指令碼使用方法後退出指令碼;
寫一個指令碼:
1、定義一個函數
1)可以接受參數mem或swap;
2)當接受參數mem時擷取當前主機實體記憶體的大小,已經使用的空間及空閑空間大小;如果已用空間超出總空間的90%,則以紅色字型警告;否則,則以綠色字型顯示空間剩餘百分比;
3)當接受參數swap時擷取當前主機虛擬記憶體的大小,已經使用的空間及空閑空間大小;如果已用空間超出總空間的90%,則以紅色字型警告;否則,則以綠色字型顯示空間剩餘百分比;
3、在主程式中顯示一個提示給使用者,說明輸入mem可以顯示實體記憶體空間使用方式;輸入swap可以顯示虛擬記憶體空間使用方式;其它任一字元提示使用者指令碼使用方法後退出指令碼;
寫一個指令碼
1、如果/tmp/net目錄存在就切換至此目錄,否則就先建立此目錄,而後切換進去;
2、下載ftp://192.168.0.254/pub/Files/rh033.txt至此目錄中,並將名字設定為在原名字後面添加上當前日期和時間,形如:
rh033-2011-04-25-09-31-10.txt
3、下載完成後向使用者報告完成下載。
寫一個指令碼:
1、建立一個函數,能接受兩個參數:
1)第一個參數為URL,即可下載的檔案;第二個參數為目錄,即下載後儲存的位置;
2)如果使用者給的目錄不存在,則提示使用者是否建立;如果建立就繼續執行,否則,函數返回一個51的錯誤值給呼叫指令碼;
3)如果給的目錄存在,則下載檔案;下載命令執行結束後測試檔案下載成功與否;如果成功,則返回0給呼叫指令碼,否則,返回52給呼叫指令碼;
2、主函數:
1)提示使用者輸入要下載檔案的URL和儲存的目錄;
2)調用函數執行下載;如果函數返回0,則告訴使用者下載成功;如果函數返回51,則告訴使用者使用者給定的目錄不存在導致下載失敗;如果函數返回52,則告訴使用者下載過程失敗;
百度的兩道shell編程面試題:
1、寫指令碼實現,可以用shell、perl等。在目錄/tmp下找到100個以abc開頭的檔案,然後把這些檔案的第一行儲存到檔案new中。
2、寫指令碼實現,可以用shell、perl等。把檔案b中有的,但是檔案a中沒有的所有行,儲存為檔案c,並統計c的行數。
某公司Shell指令碼面試題
一個文字檔內容如下:
user1 abcd
user2 g23d
user3 vgq2
…… ……
根據檔案內容大量建立使用者,第一列為使用者名稱,第二列為對應使用者的密碼;
寫一個指令碼:
1、下載檔案ftp://192.168.0.254/pub/Files/access_log至/tmp目錄;
2、分析並顯示/tmp/access_log檔案中位於行首的IP中出現次數最多的前5個,並說明每一個出現了多少次;
3、取出/tmp/access_log檔案中以http://開頭,後面緊跟著一個網域名稱或IP地址的字串,比如:http://www.linux.com/install/images/style.css 這個串的http://www.linux.com的部分;而後顯示出現次數最多的前5個;
要求:第2、3功能各以函數的方式實現;
營運工程師面試題:
編寫shell指令碼擷取原生網路地址。比如:原生ip地址是:192.168.100.2/255.255.255.0,那麼它的網路地址是192.168.100.1/255.255.255.0。
卡巴斯基面試題:
某檔案內容如下:
jack huaxue 90
tom huaxue 70
jack shuxue 99
tom shuxue 80
要求算出jack和tom的2科的平均分,用shell實現