標籤:
做一個需求流程圖需求分析-方案設計-具體實現訓練點sed,echo,test,if,while,shift1.需求分析:練習test的-d方案設計:體現的是思路,先定義一個變數,用條件去判斷具體實現:輸入:如下[[email protected]250-shiyan sh]# cat > mytesta=/root/sh/sedif [ -d $a ]thenecho "$a is a directory"fi輸出:正確滿意[[email protected]250-shiyan sh]# chmod u+x mytest[[email protected]250-shiyan sh]# ./mytest/root/sh/sed is a directory2.需求分析:上一步雖然實現,但只有一個目錄,並且是死的,不靈活。並且如果不是目錄,沒有相應的輸出。方案設計:把目錄換成檔案,加入非目錄時的輸出。具體實現:用sed在命令列直接修改源檔案。即可要點:-e,多次編輯要用到。輸入:如下[[email protected]250-shiyan sh]# sed -i -e ‘s/sed/mem/‘ -e ‘/echo/a\\else echo "$a is a file"‘ mytest輸出:正確滿意[[email protected]250-shiyan sh]# ./mytest/root/sh/mem is a file3.需求分析:將目錄在指令碼裡定死,不方便,如何去在命令列傳入檔案名稱參數,這樣就方便了。方案設計:具體實現:用sed在命令列直接修改源檔案,注釋掉第一行輸入:如下[[email protected]250-shiyan sh]# sed -i -e ‘1s/a/#&/‘ -e ‘s/\$a/\$1/‘ mytest[[email protected]250-shiyan sh]# cat mytest#a=/root/sh/memif [ -d $1 ]thenecho "$1 is a directory"else echo "$1 is a file"fi輸出:正確滿意[[email protected]250-shiyan sh]# ./mytest forfor is a file[[email protected]250-shiyan sh]# ./mytest awkawk is a directory4.需求分析:如果能在命令列測試多個檔案或目錄就好了方案設計: 每次迴圈時加入一個條件判斷即可,並相應輸出。具體實現:用while迴圈與shift來實現位置參數個數的不確定,要點:until迴圈和while迴圈的結構基本相同,但是until是判斷條件運算式為假時才繼續迴圈!痛點:-n是用來測試字串是否為空白的$* 是以一個單字串顯示所有向指令碼傳遞的參數,與位置變數不同,參數可超過9個該變數包含了所有輸入的命令列參數值。如果您運行showrpm openssh.rpm w3m.rpm webgrep.rpm此時 $* 包含了 3 個字串,即openssh.rpm, w3m.rpm and webgrep.rpm.輸入:如下[[email protected]250-shiyan sh]# vi mytest1while [ -n "$*" ]doif [ -d $1 ]thenecho "$1 is a directory"else echo "$1 is a file"fishiftdone輸出:正確滿意[[email protected]250-shiyan sh]# ./mytest1 awk for fr sed selawk is a directoryfor is a filefr is a filesed is a directorysel is a file
shell之指令碼練習