版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第7講 Shell程序設計Shell的含義Shell 既是一種命令語言,又是一種程序設計語言作為命令語言,它交互式地解釋和執(zhí)行用戶輸入的命令作為程序設計語言,它定義了各種變量和參數(shù),并提供了在高級語言中才有的控制結構,如循環(huán)和分支。目前流行的Shellash:Linux中占用資源最少的一個小一個小Shell,它只,它只包含包含24個內部命令個內部命令bash: Linux系統(tǒng)默認的Shell,包含,包含40個內部命個內部命令,基于令,基于GNU 架構發(fā)展而來。ksh:與商業(yè)發(fā)行版的ksh兼容,包含,包含42個內部命個內部命令,令,由 AT&T Bell lab. 發(fā)展而來,兼容于 ba
2、sh csh:是 Linux比較大的內核,共包含,共包含52個內部命個內部命令,令,Bill Joy 設計依附亍 BSD 版zsh:是 Linux最大的Shell之一,共包含之一,共包含84個內部個內部命令,若沒有特殊用途,沒有必要安裝。命令,若沒有特殊用途,沒有必要安裝。Bash的功能命令記憶能力,可多達上千個,上次登錄執(zhí)行過的命令記在/.bash_history ,本次在內存命令補全功能,按Tab鍵shell scripts通配符:*,?Shell基本語法輸入輸出重定向l“” 輸出重定向到一個文件l“” 輸出追加到一個文件l“ 輸出重定向操作符輸出重定向操作符 輸出重定向操作符輸出重定向操
3、作符添加到文件添加到文件 跟在輸入結束自符串后(跟在輸入結束自符串后(HERE)操作符)操作符 .filmname 執(zhí)行執(zhí)行(“源源”)filename文件文件 空格空格 在兩個字之間的間隔符在兩個字之間的間隔符通配符通配符字符字符 說明說明 ? 匹配一個字符匹配一個字符 * 匹配一個或幾個字符匹配一個或幾個字符 列出字符的范圍,列出字符的范圍,例如 abcd a-z 意指意指a到到z的全部字符的全部字符 a,z 意指意指a或或z字符字符特殊字符特殊字符反斜杠反斜杠 在某個字符前利用反斜杠可以在某個字符前利用反斜杠可以阻止阻止shell把后面的字符解釋為特把后面的字符解釋為特殊字符。殊字符。例
4、如,把例如,把$test的值賦給變量的值賦給變量var。輸入如下命令:。輸入如下命令: var =$test 如下命令才把如下命令才把$test存放在存放在var中:中: var=$test 見例子見例子./my111反引號反引號: 通知通知shell 執(zhí)行執(zhí)行由反引號定義的字符串。由反引號定義的字符串。 wc當需要把執(zhí)行命令的結果存放在變量中時,就可以在當需要把執(zhí)行命令的結果存放在變量中時,就可以在shell程序中利用反引號。例如,要統(tǒng)計當前目錄下一個文件程序中利用反引號。例如,要統(tǒng)計當前目錄下一個文件中中test.txt有幾行并把結果存在叫做有幾行并把結果存在叫做var的變量中:的變量中:
5、 var=wc -l test.txt pdksh和和bash環(huán)境環(huán)境見例子見例子./my1111分支語句分支語句ifif 語句語句 if語句通過判斷邏輯表達式來作出選擇,在語句通過判斷邏輯表達式來作出選擇,在pdksh和和bash中的條件語句有如下的格式:中的條件語句有如下的格式:if expression ; then statementselif expression ; then statementselse statementsfiif條件是可以嵌套的,條件是可以嵌套的, 位置參數(shù)及位置參數(shù)及if語句語句 下述是一個下述是一個shell程序的程序的my3,只帶了一個參數(shù)(名字),并在
6、屏只帶了一個參數(shù)(名字),并在屏幕上顯示這個名字:幕上顯示這個名字: #Name display program if $# -eq 0 ;then echo “Name not provided” else echo”Your name is ” $1 fi 在在bash中,如果執(zhí)行中,如果執(zhí)行mypgm1如下:如下: #./my3 將得到輸出:將得到輸出: Name not provided 但是,如果執(zhí)行但是,如果執(zhí)行mypgm1如下:如下: #. /my3 wang 則得到如下的輸出:則得到如下的輸出: Your name is wang 位置參數(shù)位置參數(shù) 如果把程序如果把程序my4修
7、改為:修改為: #Name display program if $# -eq 0 ;then echo “Name not provided” else echo”Your name is $2” fi 在在bash中,如果執(zhí)行中,如果執(zhí)行mypgm1如下:如下: #./my4 將得到輸出:將得到輸出: Name not provided 但是,如果執(zhí)行但是,如果執(zhí)行mypgm1如下:如下: #. /my4 wang zhang 則得到如下的輸出:則得到如下的輸出: Your name is zhang mypgm1還說明了還說明了shell編程的另一個方面,即編程的另一個方面,即內部變量內
8、部變量。在。在mypgm1中的變量中的變量$#是內部變量,并提供傳給是內部變量,并提供傳給shell程序的位置參數(shù)程序的位置參數(shù)的數(shù)目。的數(shù)目。設計一個Shell程序,讀入一個正整數(shù),如果是奇數(shù)顯示“odd”,如果是偶數(shù)顯示“even” 。 read x let y=$x/2*2 if $y eq $x ;then echo “even” else echo “odd” fi見例子見例子./if 測試文件f1是否存在,若存在刪除它,不存在建立文件f1測試目錄/root/u1是否存在,若存在刪除它,不存在建立它Shell 程序設計流程控制程序設計流程控制bash表達式的比較表達式的比較1.字符串
9、比較字符串比較 = 比較兩個字符串是否相等比較兩個字符串是否相等 != 比較兩個字符串是否不相等比較兩個字符串是否不相等 -n 判斷字符長度是否大于零判斷字符長度是否大于零 -z 判斷字符長度是否等于零判斷字符長度是否等于零bash表達式的比較表達式的比較2數(shù)字比較數(shù)字比較 -eq 比較兩個數(shù)是否相等比較兩個數(shù)是否相等 - ge 比較一個數(shù)是否大于或是等于另一個數(shù)比較一個數(shù)是否大于或是等于另一個數(shù) -le 比較一個數(shù)是否小于或是等于另一個數(shù)比較一個數(shù)是否小于或是等于另一個數(shù) -ne 比較兩個數(shù)是否不等比較兩個數(shù)是否不等 -gt 比較一個數(shù)是否大于另一個數(shù)比較一個數(shù)是否大于另一個數(shù) -lt 比較
10、一個數(shù)是否小于另一個數(shù)比較一個數(shù)是否小于另一個數(shù)bash表達式的比較表達式的比較3文件操作符文件操作符 -d 確定文件是否為目錄確定文件是否為目錄 -f 確定文件是否為普通文件確定文件是否為普通文件 -r 確定是否對文件設置了讀許可。確定是否對文件設置了讀許可。 -s 確定文件名是否具有大于零的長度確定文件名是否具有大于零的長度 -w 確定文件是否設置了寫許可確定文件是否設置了寫許可 -x 確定文件是否設置了執(zhí)行許可確定文件是否設置了執(zhí)行許可bash表達式的比較表達式的比較4.邏輯操作符邏輯操作符 邏輯操作符用來根據(jù)邏輯規(guī)則比較表達式。邏輯操作符用來根據(jù)邏輯規(guī)則比較表達式。 !,-a,-o字符
11、表示字符表示NOT 、AND和和OR ! 求反(求反(”非非”)邏輯表達式)邏輯表達式 -a 邏輯邏輯AND(”與與 ”)兩個邏輯表達式)兩個邏輯表達式 -o 邏輯邏輯OR(”或或 ”)兩個邏輯表達式)兩個邏輯表達式 循環(huán)語句循環(huán)語句for語句語句第一種格式如下:第一種格式如下: for curvar in list do statements done 對對list中的每個值需中的每個值需要執(zhí)行一次要執(zhí)行一次statements時應利用時應利用這種格式。對每次這種格式。對每次循環(huán),把循環(huán),把list中的當中的當前值賦給變量前值賦給變量curvar, list可以使含有幾個可以使含有幾個項的變
12、量,或是用項的變量,或是用空格分隔的值表??崭穹指舻闹当?。For語句的這種格式語句的這種格式是由是由pdksh和和bash使使用的。用的。循環(huán)語句循環(huán)語句1.for語句語句 假設需要把目錄中的每個文件在一個叫假設需要把目錄中的每個文件在一個叫做做backup的子目錄中建立備份,可以在的子目錄中建立備份,可以在bash 中中執(zhí)行如下的程序:執(zhí)行如下的程序: mkdir backup for file in *.txt do cp $file backup/$file done 執(zhí)行后把當前目錄下的.c為后綴的文件拷貝到子目錄backup下見例子見例子./my5求前求前5個自然數(shù)之和見例子個自然數(shù)
13、之和見例子./my6 循環(huán)語句循環(huán)語句while語句語句格式如下:格式如下: while expression do statements done 循環(huán)語句循環(huán)語句前前5個自然數(shù)之和個自然數(shù)之和 count=0 i=1 while $i le 5 do count=expr $count + $i i=expr $i + 1 done echo $count 見例子見例子./my7前前5個個 偶數(shù)數(shù)之和見例子偶數(shù)數(shù)之和見例子./my8例子:設計一個shell程序,添加一個新組為class,然后添加屬于這個組的5個用戶,用戶名的形式為stuxx,其中xx從01到05#!/bin/bashgroupadd classi=1while $i -le 5 dostr=stu0$i let i=$i+1useradd g class $strdone見例子見例子./adduser1, ./adduser2, ./adduser3如果添加20個用戶,程序如何改? ./adduser20循環(huán)語句for (i=1;i=9;i+)do donewhile (i5)dodone設計一個Shell程序,輸出全班同學的學號。假如全班同學的學號為20120122502012012281,當遇到自己的學號時輸出“This is my
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度電氣設備安裝與維修合同
- 總經(jīng)理聘請合同模板
- 房地產(chǎn)代理合同范文:委托與代理
- 代理合同:房地產(chǎn)估價委托協(xié)議書
- 廣告業(yè)務經(jīng)營權轉讓合同
- 產(chǎn)品責任保險合同專業(yè)版解析
- 自動化機器租賃協(xié)議
- 2024裝修工程轉包合同范本
- 年度長期合作協(xié)議范例
- 全面購銷合同模板珍藏
- 君子自強不息課件
- 2022人教版高二英語新教材選擇性必修全四冊課文原文及翻譯(英漢對照)
- WDZANYJY23低壓電力電纜技術規(guī)格書
- 抗高血壓藥物基因檢測課件
- 醫(yī)院管理醫(yī)院應急調配機制
- (公開課)文言文斷句-完整版課件
- 小學生性教育調查問卷
- 醫(yī)院感染管理質量持續(xù)改進反饋表
- 旅游行政管理第二章旅游行政管理體制課件
- 學生崗位實習家長(或法定監(jiān)護人)知情同意書
- 衛(wèi)生院關于召開基本公共衛(wèi)生服務項目培訓會的通知
評論
0/150
提交評論