Shell腳本編程基礎(chǔ)知識.ppt_第1頁
Shell腳本編程基礎(chǔ)知識.ppt_第2頁
Shell腳本編程基礎(chǔ)知識.ppt_第3頁
Shell腳本編程基礎(chǔ)知識.ppt_第4頁
Shell腳本編程基礎(chǔ)知識.ppt_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Linux 操作系統(tǒng),Shell 腳本編程,主要內(nèi)容和學(xué)習(xí)要求,掌握創(chuàng)建 shell 腳本的基本步驟 學(xué)會(huì)使用條件測試 掌握 if 條件結(jié)構(gòu)與 case 選擇結(jié)構(gòu) 掌握 for 循環(huán)、while 循環(huán)和 until 循環(huán)結(jié)構(gòu) 學(xué)會(huì) shift 命令的使用 學(xué)會(huì) shell 腳本的調(diào)試,Shell 腳本,Shell 腳本,如果有一系列你經(jīng)常使用的Linux命令,你可以把它們存儲在一個(gè)文件里,shell可以讀取這個(gè)文件并順序執(zhí)行其中的命令,這樣的文件被稱為腳本文件。shell 腳本按行解釋。,Shell 腳本的編寫,Shell 腳本是純文本文件,可以使用任何文本編輯器編寫 Shell 腳本通常是以

2、 .sh 作為后綴名,Shell 腳本的執(zhí)行,chmod +x script_name ./script_name,bash script_name,第一行:指定用哪個(gè)程序來編譯和執(zhí)行腳本。,Shell 腳本的格式,#!/bin/bash,可執(zhí)行語句和 shell 控制結(jié)構(gòu),注釋:以 “ # ” 開頭,可獨(dú)占一行,或跟在語句的后面。,Shell 腳本,#!/bin/sh,#!/bin/csh,一個(gè) shell 腳本通常由一組 Linux 命令、shell 命令、控制結(jié)構(gòu)和注釋語句構(gòu)成。,在腳本中多寫注釋語句是一個(gè)很好的編程習(xí)慣,#!/bin/bash # This is the first B

3、ash shell program # ScriptName: greetings.sh echo echo e Hello $LOGNAME, c echo its nice talking to you. echo Your present working directory is: pwd # Show the name of present directory echo echo e The time is date +%T!. nBye echo,bash greetings.sh,chmod +x greetings.sh ./greetings,Shell 腳本舉例,echo命令

4、,功能說明:顯示文字。 語 法:echo -ne字符串 或 echo -help-version 補(bǔ)充說明:echo會(huì)將輸入的字符串送往標(biāo)準(zhǔn)輸出。輸出的字符串間以空白字符隔開, 并在最后加上換行號。 -n 不進(jìn)行換行 -e 若字符串中出現(xiàn)以下字符,則特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出 n 換行 b 空格.,參 數(shù):,-n 不要在最后自動(dòng)換行 -e 若字符串中出現(xiàn)以下字符,則特別加以處理,而不會(huì)將它當(dāng)成一般文字輸出: a 發(fā)出警告聲; b 刪除前一個(gè)字符; c 最后不加上換行符號; f 換行但光標(biāo)仍舊停留在原來的位置; n 換行且光標(biāo)移至行首; r 光標(biāo)移至行首,但不換行; t 插入tab

5、; v 與f相同; 插入字符; nnn 插入nnn(八進(jìn)制)所代表的ASCII字符; -help 顯示幫助 -version 顯示版本信息,#!/bin/bash # This script is to test the usage of read # Scriptname: ex4read.sh echo = examples for testing read = echo -e What is your name? c read name echo Hello $name echo echo -n Where do you work? read echo I guess $REPLY ke

6、eps you busy! echo read -p Enter your job title: #自動(dòng)讀給REPLY echo I thought you might be an $REPLY. echo echo = End of the script =,Shell 腳本舉例,read命令,read variable #讀取變量給variable read x y #可同時(shí)讀取多個(gè)變量 read #自動(dòng)讀給REPLY read p “Please input: ” #自動(dòng)讀給REPLY,狀態(tài)變量 $? 中保存命令退出狀態(tài)的值,grep $USER /etc/passwdecho $? g

7、rep hello /etc/passwd; echo $?,條件測試,條件測試可以根據(jù)某個(gè)特定條件是否滿足,來選擇執(zhí)行相應(yīng)的任務(wù)。,Bash 中允許測試兩種類型的條件: 命令成功或失敗,表達(dá)式為真或假,任何一種測試中,都要有退出狀態(tài)(返回值),退出狀態(tài)為 0 表示命令成功或表達(dá)式為真,非0 則表示命令失敗或表達(dá)式為假。,內(nèi)置測試命令 test,通常用 test 命令來測試表達(dá)式的值,x=5; y=10 test $x -gt $y echo $?,test 命令可以用 方括號 來代替,x=5; y=10 $x -gt $y echo $?,表達(dá)式測試包括字符串測試、整數(shù)測試和文件測試。,測試

8、表達(dá)式的值,方括號前后要留空格!,name=Tom $name = Tt? echo $?,2.x 版本以上的 Bash 中可以用雙方括號來測試表達(dá)式的值,此時(shí)可以使用通配符進(jìn)行模式匹配。,測試表達(dá)式的值, $name = Tt? echo $?,字符串測試,name=Tom; -z $name ; echo $?,操作符兩邊必須留空格!,字符串測試,name2=Andy; $name = $name2 ; echo $?,整數(shù)測試,即比較大小,x=1; $x -eq 1 ; echo $?,x=a; $x -eq 1 ; echo $?,整數(shù)測試,操作符兩邊必須留空格!,X,整數(shù)測試也可以使

9、用 let 命令或雙圓括號,x=1; let $x = 1; echo $?,x=1; ($x+1= 2 ); echo $?,只能用于整數(shù)測試!,整數(shù)測試,相應(yīng)的操作符為:,= 、!= 、 、= 、 、=,例:,兩種測試方法的區(qū)別,使用的操作符不同 let 和 雙圓括號中可以使用算術(shù)表達(dá)式,而中括號不能 let 和 雙圓括號中,操作符兩邊可以不留空格,邏輯測試,x=1; name=Tom; $x -eq 1 a n $name ; echo $?,邏輯測試,注:不能隨便添加括號, ( $x -eq 1 ) a ( n $name ) ; echo $?,X,x=1; name=Tom; $x

10、 -eq 1 echo $?,可以使用模式的邏輯測試,邏輯測試,文件測試:文件是否存在,文件屬性,訪問權(quán)限等。,常見的文件測試操作符,更多文件測試符參見 test 的在線幫助,man test,文件測試,檢查空值, $name = , ! $name , X$name != X ,檢查空值,語法結(jié)構(gòu),if expr1 # 如果expr1 為真(返回值為0) then # 那么 commands1 # 執(zhí)行語句塊 commands1 elif expr2 # 若expr1 不真,而expr2 為真 then # 那么 commands2 # 執(zhí)行語句塊 commands2 . . # 可以有多個(gè)

11、 elif 語句 else # else 最多只能有一個(gè) commands4 # 執(zhí)行語句塊 commands4 fi # if 語句必須以單詞 fi 終止,if 條件語句,commands 為可執(zhí)行語句塊,如果為空,需使用 shell 提供的空命令 “ : ”,即冒號。該命令不做任何事情,只返回一個(gè)退出狀態(tài) 0,if 語句可以嵌套使用,ex4if.sh,chkperm.sh,chkperm2.sh, name_grep,tellme,tellme2,idcheck.sh,幾點(diǎn)說明,elif 可以有任意多個(gè)(0 個(gè)或多個(gè)),else 最多只能有一個(gè)(0 個(gè)或 1 個(gè)),if 語句必須以 fi

12、表示結(jié)束,expr 通常為條件測試表達(dá)式;也可以是多個(gè)命令,以最后一個(gè)命令的退出狀態(tài)為條件值。,ex4if.sh,#!/bin/bash # scriptname: ex4if.sh # echo -n Please input x,y: read x y echo x=$x, y=$y if ( x y ); then echo x is larger than y elif ( x = y); then echo x is equal to y else echo x is less than y fi,chkperm.sh,#!/bin/bash # Using the old styl

13、e test command: # filename: perm_check.sh # file=testing if -d $file then echo $file is a directory elif -f $file then if -r $file -a -w $file -a -x $file then # nested if command echo You have read,write,and execute permission on $file. fi else echo $file is neither a file nor a directory. fi,chkpe

14、rm2.sh,#!/bin/bash # Using the new style test command: # filename: perm_check2.sh # file=./testing if -d $file then echo $file is a directory elif -f $file then if -r $file ; # 跳出 case 結(jié)構(gòu) pattern2) # 若 expr 與 pattern2 匹配 commands2 # 執(zhí)行語句塊 commands2 ; # 跳出 case 結(jié)構(gòu) . . # 可以有任意多個(gè)模式匹配 *) # 若 expr 與上面的模式

15、都不匹配 commands # 執(zhí)行語句塊 commands ; # 跳出 case 結(jié)構(gòu)esac # case 語句必須以 esac 終止,case 選擇語句,case 語句舉例:yes_no.sh,幾點(diǎn)說明,每個(gè)命令塊的最后必須有一個(gè)雙分號,可以獨(dú)占一行,或放在最后一個(gè)命令的后面。,所給的匹配模式 pattern 中可以含有通配符和“ | ”。,如果 expr 沒有找到匹配的模式,則執(zhí)行缺省值 “ *) ” 后面的命令塊 ( 類似于 if 中的 else ); “ *) ” 可以不出現(xiàn)。,表達(dá)式 expr 按順序匹配每個(gè)模式,一旦有一個(gè)模式匹配成功,則執(zhí)行該模式后面的所有命令,然后退出 c

16、ase。,yes_no.sh,#!/bin/bash # test case # scriptname: yes_no.sh # echo -n Do you wish to proceed y/n: read ans case $ans in y|Y|yes|Yes) echo yes is selected ; n|N|no|No) echo no is selected ; *) echo basename $0: Unknown response exit 1 ; esac,語法結(jié)構(gòu),for variable in list # 每一次循環(huán),依次把列表 list 中的一個(gè)值賦給循環(huán)變量

17、 do # 循環(huán)開始的標(biāo)志 commands # 循環(huán)變量每取一次值,循環(huán)體就執(zhí)行一遍 done # 循環(huán)結(jié)束的標(biāo)志,幾點(diǎn)說明,列表 list 可以是命令替換、變量名替換、字符串和文件名列表 ( 可包含通配符 ) for 循環(huán)執(zhí)行的次數(shù)取決于列表 list 中單詞的個(gè)數(shù) for 循環(huán)體中一般要出現(xiàn)循環(huán)變量,但也可以不出現(xiàn),for 循環(huán)語句,執(zhí)行第一輪循環(huán)時(shí),將 list 中的第一個(gè)詞賦給循環(huán)變量,并把該詞從 list 中刪除,然后進(jìn)入循環(huán)體,執(zhí)行 do 和 done 之間的命令。下一次進(jìn)入循環(huán)體時(shí),則將第二個(gè)詞賦給循環(huán)變量,并把該詞從 list 中刪除,再往后的循環(huán)也以此類推。當(dāng) list 中

18、的詞全部被移走后,循環(huán)就結(jié)束了。,循環(huán)執(zhí)行過程,forloop.sh,mybackup.sh,位置參量的使用: $* 與 $,greet.sh,可以省略 in list ,此時(shí)使用位置參量,permx.sh idcheck.sh greet.sh yes_no.sh permx.sh *.sh,for 循環(huán)執(zhí)行過程,forloop.sh,#!/bin/bash # Scriptname: forloop.sh for name in Tom Dick Harry Joe do echo Hi $name done echo out of loop,forloop2.sh,#!/bin/bash # Scriptname: forloop2.sh for name in cat namelist do echo Hi $name done echo out of loop,mybackup.sh,#!/bin/bash # Scriptname: mybackup.sh # Purpose: Create backup files and store # them in a backup directory. # backup_dir=backup mk

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論