




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、非常好的十道Linux shell腳本面試題 1、編寫個shell腳本將當前目錄下大于10K的文件轉移到/tmp目錄下 #/bin/sh #Programm : # Using for move currently directory to /tmp for FileName in ls -l | awk '$5>10240 print $9' do mv $FileName /tmp done ls -al /tmp echo "Done! "
2、; 2、編寫shell腳本獲取本機的網絡地址。 比如:本機的ip地址是:/,那么它的網絡地址是 方法一: #!/bin/bash #This script print ip and network file="/etc/sysconfig/network-scripts/ifcfg-eth0" if -f $file ;then IP=grep "IPADDR" $file|awk -F"="
3、 ' print $2 ' MASK=grep "NETMASK" $file|awk -F"=" ' print $2 ' echo "$IP/$MASK" exit 1 fi 方法二: #!/bin/bash #This programm will printf ip/network # IP=ifconfig eth0 |grep 'inet ' |sed 's/.*addr:/g
4、39;|sed 's/ Bcast.*$/g' NETMASK=ifconfig eth0 |grep 'inet '|sed 's/.*Mask:/g' echo "$IP/$NETMASK" exit 3、用Shell編程,判斷一文件是不是字符設備文件,如果是將其拷貝到 /dev 目錄下。 參考程序: #!/bin/sh FILENAME= echo “Input file name:” read FILENAME if -
5、c "$FILENAME" then cp $FILENAME /dev fi 4請為下列shell程序添加注釋,并說明程序的功能和調用方法: #!/bin/sh # # /etc/rc.d/rc.httpd # # Start/stop/restart the Apache web server. # # To make Apache start automatically at boot, make this # file executable: c
6、hmod 755 /etc/rc.d/rc.httpd # case "$1" in 'start') /usr/sbin/apachectl start ; 'stop') /usr/sbin/apachectl stop ; 'restart') /usr/sbin/apachectl restart ; *) echo "usage $0 start|stop|restart" ; esac&
7、#160;參考答案: (1)程序注釋 #!/bin/sh 定義實用的shell # # /etc/rc.d/rc.httpd 注釋行,凡是以星號開始的行均為注釋行。 # # Start/stop/restart the Apache web server. # # To make Apache start automatically at boot, make this # file executable: chmod 755 /etc/rc.d/rc.httpd # case &qu
8、ot;$1" in #case結構開始,判斷“位置參數(shù)”決定執(zhí)行的操作。本程序攜帶一個“位置參數(shù)”,即$1 'start') #若位置參數(shù)為start /usr/sbin/apachectl start ; #啟動httpd進程 'stop') #若位置參數(shù)為stop /usr/sbin/apachectl stop ; #關閉httpd進程 'restart') #若位置參數(shù)為stop /usr/sbin/apachectl restart ; #重新啟動httpd進程
9、60;*) #若位置參數(shù)不是start、stop或restart時 echo "usage $0 start|stop|restart" ; #顯示命令提示信息:程序的調用方法 esac #case結構結束 (2)程序的功能是啟動,停止或重新啟動httpd進程 (3)程序的調用方式有三種:啟動,停止和重新啟動。 5設計一個shell程序,添加一個新組為class1,然后添加屬于這個組的30個用戶,用戶名的形式為stdxx,其中xx從01到30。 參考答案: #!/bin/sh i=1
10、groupadd class1 while $i -le 30 do if $i -le 9 ;then USERNAME=stu0$i else USERNAME=stu$i fi useradd $USERNAME mkdir /home/$USERNAME chown -R $USERNAME /home/$USERNAME chgrp -R class1 /home/$USERNAME i=$($i+1) done 6編寫shell程序,實現(xiàn)自動
11、刪除50個賬號的功能。賬號名為stud1至stud50。 參考程序: #!/bin/sh i=1 while $i -le 50 do userdel -r stud$i i=$($i+1 ) done 7某系統(tǒng)管理員需每天做一定的重復工作,請按照下列要求,編制一個解決 方案 : (1)在下午4 :50刪除/abc目錄下的全部子目錄和全部文件; (2)從早8:00下午6:00每小時讀取/xyz目錄下x1文件中每行第一個域的全部數(shù)據(jù)加入到/backup目錄下的bak01.txt文件內;
12、 (3)每逢星期一下午5:50將/data目錄下的所有目錄和文件歸檔并壓縮為文件:backup.tar.gz; (4)在下午5:55將IDE接口的CD-ROM卸載(假設:CD-ROM的設備名為hdc); (5)在早晨8:00前開機后啟動。 參考答案: 解決方案: (1)用vi創(chuàng)建編輯一個名為prgx的crontab文件; prgx文件的內容: 50 16 * * * rm -r /abc/* (2)、0 8-18/1 * * * cut -f1 /xyz/x1 >> /backup/bak01
13、.txt (3)、50 17 * * * tar zcvf backup.tar.gz /data (4)、55 17 * * * umount /dev/hdc (5)、由超級用戶登錄,用crontab執(zhí)行 prgx文件中的內容: rootxxx:#crontab prgx;在每日早晨8:00之前開機后即可自動啟動crontab。 8設計一個shell程序,在每月第一天備份并壓縮/etc目錄的所有內容,存放在/root/bak目錄里,且文件名為如下形式y(tǒng)ymmdd_etc,yy為年,mm為月,dd為日。Shell程序filebac
14、k存放在/usr/bin目錄下。 參考答案: (1)編寫shell程序fileback: #!/bin/sh DIRNAME=ls /root | grep bak if -z "$DIRNAME" ; then mkdir /root/bak cd /root/bak fi YY=date +%y MM=date +%m DD=date +%d tar zcvf $BACKETC /etc echo "fileback f
15、inished!" (2)編寫任務定時器: echo "0 0 1 * * /bin/sh /usr/bin/fileback" > /root/etcbakcron crontab /root/etcbakcron 或使用crontab -e 命令添加定時任務: 0 1 * * * /bin/sh /usr/bin/fileback 9有一普通用戶想在每周日凌晨零點零分定期備份/user/backup到/tmp目錄下,該用戶應如何做? 參考答案:(1)第一種方法: 用戶應使用c
16、rontab e 命令創(chuàng)建crontab文件。格式如下: 0 0 * * sun cp r /user/backup /tmp (2)第二種方法: 用戶先在自己目錄下新建文件file,文件內容如下: 0 * * sun cp r /user/backup /tmp 然后執(zhí)行 crontab file 使生效。 10設計一個Shell程序,在/userdata目錄下建立50個目錄,即user1user50,并設置每個目錄的權限,其中其他用戶的權限為:讀;文件所有者的權限為:讀、寫、執(zhí)行;文件所有者所在組的權限為:讀、執(zhí)行。 參
17、考答案: 建立程序 Pro16如下: #!/bin/sh i=1 while i -le 50 do if -d /userdata ;then mkdir -p -m 754 /userdata/user$i 加上-m 754 就不用寫下面那一句了 -p 是遞歸建立目錄 #chmod 754 /userdata/user$i echo "user$i" let "i = i + 1" (或i=$($i+1) else
18、;mkdir /userdata mkdir -p -m /userdata/user$i #chmod 754 /userdata/user$i echo "user$i" let "i = i + 1" (或i=$($i1) fi done1) 如何向腳本傳遞參數(shù) ?./script argument例子 : 顯示文件名稱腳本./show.sh file1.txtcat show.sh#!/bin/bashcat $12) 如何在腳本中使用參數(shù) ?第一個參數(shù) : $1,第二個參數(shù) : $2例
19、子 : 腳本會復制文件(arg1) 到目標地址(arg2)./copy.sh file1.txt /tmp/cat copy.sh#!/bin/bashcp $1 $23) 如何計算傳遞進來的參數(shù) ?$#4) 如何在腳本中獲取腳本名稱 ?$05) 如何檢查之前的命令是否運行成功 ?$?6) 如何獲取文件的最后一行 ?tail -17) 如何獲取文件的第一行 ?head -18) 如何獲取一個文件每一行的第三個元素 ?awk 'print $3'9) 假如文件中每行第一個元素是 FIND,如何獲取第二個元素awk ' if ($1 = "FIND")
20、print $2'10) 如何調試 bash 腳本將 -xv 參數(shù)加到 #!/bin/bash 后例子:#!/bin/bash xv11) 舉例如何寫一個函數(shù) ?function example echo "Hello world!"12) 如何向連接兩個字符串 ?V1="Hello"V2="World"V3=$V1$V2echo $V3輸出HelloWorld13) 如何進行兩個整數(shù)相加 ?V1=1V2=2let V3=$V1+$V2echo $V3輸出3據(jù) kashu 的意見,本題的更佳回答為:兩個整數(shù)相加,還有若干種方法
21、實現(xiàn):A=5B=6echo $($A+$B) # 方法 2echo $A+$B # 方法 3expr $A + $B # 方法 4echo $A+$B | bc # 方法 5awk 'BEGINprint '"$A"'+'"$B"'' # 方法 614) 如何檢查文件系統(tǒng)中是否存在某個文件 ?if -f /var/log/messages thenecho "File exists"fi15) 寫出 shell 腳本中所有循環(huán)語法 ?for 循環(huán) :for i in $( ls ); d
22、oecho item: $idonewhile 循環(huán) :#!/bin/bashCOUNTER=0while $COUNTER -lt 10 ; doecho The counter is $COUNTERlet COUNTER=COUNTER+1doneuntil 循環(huán) :#!/bin/bashCOUNTER=20until $COUNTER -lt 10 ; doecho COUNTER $COUNTERlet COUNTER-=1done16) 每個腳本開始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?這一行說明要使用的 shell。#!/bin/bash 表示腳本使
23、用 /bin/bash。對于 python 腳本,就是 #!/usr/bin/python。(LCTT譯注:這一行稱之為釋伴行。)17) 如何獲取文本文件的第 10 行 ?head -10 file|tail -118) bash 腳本文件的第一個符號是什么#19) 命令: -z "" && echo 0 | echo 1 的輸出是什么020) 命令 “export” 有什么用 ?使變量在子 shell 中可用。21) 如何在后臺運行腳本 ?在腳本后面添加 “&”。據(jù) kashu 的意見,更好的答案是:nohup command &大部分時間
24、我們可能是遠程使用Linux,我碰到過由于網絡斷線使得在后臺運行的command &沒了.22) "chmod 500 script" 做什么 ?使腳本所有者擁有可執(zhí)行權限。23) ">" 做什么 ?重定向輸出流到文件或另一個流。24) & 和 && 有什么區(qū)別· & - 希望腳本在后臺運行的時候使用它· && - 當前一個腳本成功完成才執(zhí)行后面的命令/腳本的時候使用它25) 什么時候要在 condition 之前使用 “if” ?當條件滿足時需要運行多條命令的時候。26)
25、 命令: name=John && echo 'My name is $name' 的輸出是什么My name is $name27) bash shell 腳本中哪個符號用于注釋 ?#28) 命令: echo $new:-variable 的輸出是什么variable29) ' 和 " 引號有什么區(qū)別 ?· ' - 當我們不希望把變量轉換為值的時候使用它。· " - 會計算所有變量的值并用值代替。30) 如何在腳本文件中重定向標準輸出和標準錯誤流到 log.txt 文件 ?在腳本文件中添加 "e
26、xec >log.txt 2>&1" 命令。31) 如何只用 echo 命令獲取字符串變量的一部分 ?echo $variable:x:yx - 起始位置y - 長度例子:variable="My name is Petras, and I am developer."echo $variable:11:6 # 會顯示 Petras32) 如果給定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令獲取 home_dir ?echo $variable#*:*:*:或echo
27、$variable#*:33) 如何從上面的字符串中獲取 “User” ?echo $variable%:*:*:*或echo $variable%:*34) 如何使用 awk 列出 UID 小于 100 的用戶 ?awk -F: '$3<100' /etc/passwd35) 寫程序為用戶計算主組數(shù)目并顯示次數(shù)和組名cat /etc/passwd|cut -d: -f4|sort|uniq -c|while read c gdo echo $c; grep :$g: /etc/group|cut -d: -f1;|xargs -n 2done36) 如何在 bash s
28、hell 中更改標準的域分隔符為 ":" ?IFS=":"37) 如何獲取變量長度 ?$#variable38) 如何打印變量的最后 5 個字符 ?echo $variable: -539) $variable:-10 和 $variable: -10 有什么區(qū)別?· $variable:-10 - 如果之前沒有給 variable 賦值則輸出 10;如果有賦值則輸出該變量· $variable: -10 - 輸出 variable 的最后 10 個字符40) 如何只用 echo 命令替換字符串的一部分 ?echo $variable
29、/pattern/replacement41) 哪個命令將命令替換為大寫 ?tr ':lower:' ':upper:'42) 如何計算本地用戶數(shù)目 ?wc -l /etc/passwd|cut -d" " -f1 或者 cat /etc/passwd|wc -l43) 不用 wc 命令如何計算字符串中的單詞數(shù)目 ?set $stringecho $#44) "export $variable" 或 "export variable" 哪個正確 ?export variable45) 如何列出第二個字母
30、是 a 或 b 的文件 ?ls -d ?ab*46) 如何將整數(shù) a 加到 b 并賦值給 c ?c=$(a+b)或c=expr $a + $b或c=echo "$a+$b"|bc47) 如何去除字符串中的所有空格 ?echo $string|tr -d " "48) 重寫這個命令,將輸出變量轉換為復數(shù): item="car" echo "I like $item" ?item="car" echo "I like $items"49) 寫出輸出數(shù)字 0 到 100 中 3 的
31、倍數(shù)(0 3 6 9 )的命令 ?for i in 0.100.3; do echo $i; done或for ( i=0; i<=100; i=i+3 ); do echo "Welcome $i times" done50) 如何打印傳遞給腳本的所有參數(shù) ?echo $*或echo $51) $a = $b 和 $a -eq $b 有什么區(qū)別· $a = $b - 用于字符串比較· $a -eq $b - 用于數(shù)字比較52) = 和 = 有什么區(qū)別· = - 用于為變量賦值· = - 用于字符串比較53) 寫出測試 $a 是
32、否大于 12 的命令 ? $a -gt 12 54) 寫出測試 $b 是否小于等于 12 的命令 ? $b -le 12 55) 如何檢查字符串是否以字母 "abc" 開頭 ? $string = abc* 56) $string = abc* 和 $string = "abc*" 有什么區(qū)別· $string = abc* - 檢查字符串是否以字母 abc 開頭· $string = "abc" - 檢查字符串是否完全等于 abc57) 如何列出以 ab 或 xy 開頭的用戶名 ?egrep "ab|x
33、y" /etc/passwd|cut -d: -f158) bash 中 $! 表示什么意思 ?后臺最近執(zhí)行命令的 PID.59) $? 表示什么意思 ?前臺最近命令的結束狀態(tài)。60) 如何輸出當前 shell 的 PID ?echo $61) 如何獲取傳遞給腳本的參數(shù)數(shù)目 ?echo $#(LCTT 譯注:和第3題重復了。)62) $* 和 $ 有什么區(qū)別· $* - 以一個字符串形式輸出所有傳遞到腳本的參數(shù)· $ - 以 $IFS 為分隔符列出所有傳遞到腳本中的參數(shù)63) 如何在 bash 中定義數(shù)組 ?array=("Hi" "
34、my" "name" "is")64) 如何打印數(shù)組的第一個元素 ?echo $array065) 如何打印數(shù)組的所有元素 ?echo $array66) 如何輸出所有數(shù)組索引 ?echo $!array67) 如何移除數(shù)組中索引為 2 的元素 ?unset array268) 如何在數(shù)組中添加 id 為 333 的元素 ?array333="New_element"69) shell 腳本如何獲取輸入的值 ?a) 通過參數(shù)./script param1 param2b) 通過 read 命令read -p "De
35、stination backup Server : " desthost70) 在腳本中如何使用 "expect" ?/usr/bin/expect << EODspawn rsync -ar $line $desthost:$destpathexpect "*?assword:*"send "$passwordr"expect eofEOD1、用sed修改test.txt的23行test為tset; sedi 23s/test/tset/g test.txt2、查看/web.log第25
36、行第三列的內容。 sedn 25p /web.log | cut d “ ” f3 headn25 /web.log | tail n1 | cut d “ ” f3 awkF “ ” NR=23print $3 /web.log3、刪除每個臨時文件的最初三行。 sedi 1,3d /tmp/*.tmp4、腳本編程:求100內的質數(shù)。 #!/bin/bash i=1 while $i -le 100 ;do
37、0; ret=1 for( j=2;j<$i;j+ );do if $($i%$j)-eq 0 thenret=0break fi done if $ret -eq 1 ;then echo-n "$i "
38、160;fi i=$(i+1 ) done5、晚上11點到早上8點之間每兩個小時查看一次系統(tǒng)日期與時間,寫出具體配置命令 echo1 23,1-8/2 * * * root /tmp/walldate.sh >> /etc/crontab6、編寫個shell腳本將當前目錄下大于10K的文件轉移到/tmp目錄下 #!/bin/bash fileinfo=($(du./*) length=$#fileinfo
39、0; for(i=0;i<$length;i=$(i+2 );do if $fileinfo$i -le 10 ;then mv $fileinfo$(i+1 ) /tmp fi done7、如何將本地80端口的請求轉發(fā)到8080端口,當前主機IP為 /sbin/iptables-t nat -A PREROUTING -p tcp -dport 80 -j DNAT -to :8
40、080 /sbin/iptables-t nat -A PREROUTING -p tcp -dport 80 -j REDIRECT -to 80808、在11月份內,每天的早上6點到12點中,每隔2小時執(zhí)行一次/usr/bin/httpd.sh 怎么實現(xiàn) echo"1 6-12/2 * * * root /usr/bin/httpd.sh >> /etc/crontab"9、在shell環(huán)境如何殺死一個進程? psaux | grep | cut -f?
41、得到pid cat/proc/pid killpid10、在shell環(huán)境如何查找一個文件? find/ -name abc.txt11、在shell里如何新建一個文件? touch/newfile.txt12、Linux下面的sed和awk的編寫1)如何顯示文本file.txt中第二大列大于56789的行? awk -F "," 'if($2>56789)print $0' file.txt2)顯示file.txt的1,3,5,7,10,15行
42、? sed -n "1p;3p;5p;7p;10p;15p" file.txt awk 'NR=1|NR=3|NR=5|NR=15print $0' file.txt3)將file.txt的制表符,即tab,全部替換成"|" sed-i "s#t#|#g" file.txt13、把當前目錄(包含子目錄)下所有后綴為“.sh”的文件后綴變更為“.shell” #!/bin/bash str=find./ -nam
43、e *.sh fori in $str do mv$i $i%shshell done14、編寫shell實現(xiàn)自動刪除50個賬號功能,賬號名為stud1至stud50 #!/bin/bash for(i=1;i<=50;i+);do userdel stud$i done15、請用Iptables寫出只允許79 訪問本服務器的22端口。 /sbin/iptables -A input -p tcp -dport 22 -s 79 -j ACCEPT /sbin/iptables -A input -p udp -dport 22 -s 79 -j ACCEPT /sbin/iptables -P input -j DROP16、在shell中變量的賦值有四種方法,其中,采用name=12的方法稱( A )。A直接賦值
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦寫字樓租賃合同書(32篇)
- 安全生產知識考試題庫及答案大全
- 班主任與學生交流溝通的方式公開課教學設計課件資料
- 北京市房山區(qū)2019-2021年(三年)中考二模英語試卷分類匯編:閱讀理解
- 湖北省武漢市常青聯(lián)合體2024-2025學年度高一下學期期末考試語文試題(含答案)
- 工會全民讀書活動方案
- 小學生理財活動方案
- 小磨香油活動方案
- 工會活動棋類活動方案
- 工商銀行夏日活動方案
- 微波技術與天線 第5章
- 衛(wèi)生監(jiān)督協(xié)管試題庫
- 鋼灰?guī)熹撝苹規(guī)旒夹g協(xié)議
- 變速箱廠總平面布置設計課程設計說明書
- 材料送檢計劃表(共7頁)
- 信息安全評估表(共23頁)
- 治安案件詢問筆錄(適用口頭傳喚)
- 《髓質海綿腎》課件.ppt
- 共青團委員會選票模板
- 系統(tǒng)是成功的秘密
- 塑性變形力學PPT課件
評論
0/150
提交評論