Shell及其初級(jí)編程_第1頁(yè)
Shell及其初級(jí)編程_第2頁(yè)
Shell及其初級(jí)編程_第3頁(yè)
Shell及其初級(jí)編程_第4頁(yè)
Shell及其初級(jí)編程_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1 Shell概述概述 第第8講講 Shell及其編程及其編程 2 shell腳本腳本 3 shell腳本變量腳本變量 1 Shell概述概述 lshell就是就是可以接受用戶(hù)輸入命令的程序可以接受用戶(hù)輸入命令的程序。lshell隱藏隱藏了操作系統(tǒng)低層的了操作系統(tǒng)低層的細(xì)節(jié)細(xì)節(jié)。lUnix下的圖形用戶(hù)界面下的圖形用戶(hù)界面Gnome和和KDE,有時(shí)也被叫,有時(shí)也被叫做做“虛擬虛擬shell”或或“圖形圖形shell”。 lLinux操作系統(tǒng)下的操作系統(tǒng)下的shell既是既是用戶(hù)交互界面用戶(hù)交互界面,也是控,也是控制系統(tǒng)的制系統(tǒng)的腳本語(yǔ)言腳本語(yǔ)言。l在在Linux系列操作系統(tǒng)下,系列操作系統(tǒng)下,s

2、hell是控制系統(tǒng)啟動(dòng)、是控制系統(tǒng)啟動(dòng)、X Window啟動(dòng)、和很多其他實(shí)用工具的啟動(dòng)、和很多其他實(shí)用工具的腳本解釋程序腳本解釋程序。1.1 Bourne Shell l 第一個(gè)第一個(gè)標(biāo)準(zhǔn)標(biāo)準(zhǔn)Linux Shell是是1970年底在年底在V7 Unix(AT&T第第7版)中引入,以其資助者版)中引入,以其資助者Stephen Bourne的名字命名。的名字命名。lBourne shell 是一個(gè)是一個(gè)交換式的命令解釋器和命令編程語(yǔ)言交換式的命令解釋器和命令編程語(yǔ)言, 可以運(yùn)行為可以運(yùn)行為login shell或者或者login shell的子的子shelll只有只有l(wèi)ogin命令可以調(diào)

3、用命令可以調(diào)用Bourne shell作為一個(gè)作為一個(gè)login shell。此時(shí),。此時(shí),shell先讀取先讀取/etc/profile文件和文件和$HOME/.profile文件文件l/etc/profile文件為所有用戶(hù)文件為所有用戶(hù)定制環(huán)境定制環(huán)境,$HOME/.profile文文件為本用戶(hù)定制環(huán)境。件為本用戶(hù)定制環(huán)境。shell讀取用戶(hù)輸入。讀取用戶(hù)輸入。1.2 C Shell lC Shell 是是Bill Joy在上世紀(jì)在上世紀(jì)80年代早期,在年代早期,在Berkeley的加利福尼亞大學(xué)開(kāi)發(fā)的。的加利福尼亞大學(xué)開(kāi)發(fā)的。l目的是讓用戶(hù)更容易的目的是讓用戶(hù)更容易的使用交互式功能使用交

4、互式功能,并,并把把ALGOL風(fēng)格,適于數(shù)值計(jì)算的語(yǔ)法結(jié)構(gòu)變風(fēng)格,適于數(shù)值計(jì)算的語(yǔ)法結(jié)構(gòu)變成了成了C語(yǔ)言風(fēng)格語(yǔ)言風(fēng)格。l它它新增新增了命令歷史、別名、文件名替換、作了命令歷史、別名、文件名替換、作業(yè)控制等功能業(yè)控制等功能 1.3 Korn Shell 在很長(zhǎng)一段時(shí)間里,只有在很長(zhǎng)一段時(shí)間里,只有兩類(lèi)兩類(lèi)shell供選擇,供選擇,Bourne shell用來(lái)編程,用來(lái)編程,C shell用來(lái)交互用來(lái)交互lAT&T貝爾實(shí)驗(yàn)室貝爾實(shí)驗(yàn)室的的David Korn開(kāi)發(fā)了開(kāi)發(fā)了Korn shell。lksh結(jié)合結(jié)合了所有的了所有的C shell的交互式特性,并的交互式特性,并融入融入了了Bourn

5、e shell的語(yǔ)法。的語(yǔ)法。l新增新增了數(shù)學(xué)計(jì)算,進(jìn)程協(xié)作(了數(shù)學(xué)計(jì)算,進(jìn)程協(xié)作(coprocess)、行內(nèi)編輯()、行內(nèi)編輯(inline editing)等)等功能功能。lKorn Shell 是一個(gè)交互式的命令解釋器和命令編程語(yǔ)言。是一個(gè)交互式的命令解釋器和命令編程語(yǔ)言。它符合它符合POSIX標(biāo)準(zhǔn)標(biāo)準(zhǔn) 1.4 Bourne Again Shell Bourne Again Shell ,簡(jiǎn)稱(chēng),簡(jiǎn)稱(chēng)bash,1987年由布萊恩年由布萊恩??怂归_(kāi)發(fā)的。也是??怂归_(kāi)發(fā)的。也是GNU計(jì)劃的一部分,用來(lái)計(jì)劃的一部分,用來(lái)替代替代Bourne shell。bash是大多數(shù)類(lèi)是大多數(shù)類(lèi)Unix系統(tǒng)以

6、及系統(tǒng)以及Mac OS X v10.4默認(rèn)的默認(rèn)的shell,被移植到多種系統(tǒng)中,被移植到多種系統(tǒng)中l(wèi)bash的語(yǔ)法針對(duì)的語(yǔ)法針對(duì)Bourne shell的不足做了很多擴(kuò)展。的不足做了很多擴(kuò)展。lbash的命令語(yǔ)法很多來(lái)自的命令語(yǔ)法很多來(lái)自Korn shell 和和C shell l作為一個(gè)交互式的作為一個(gè)交互式的shell,按下,按下TAB鍵即可自動(dòng)補(bǔ)全已部分鍵即可自動(dòng)補(bǔ)全已部分輸入的程序名,文件名,變量名等等輸入的程序名,文件名,變量名等等 1.5 查看用戶(hù)查看用戶(hù)shell l使用命令使用命令cat /etc/shells來(lái)查看來(lái)查看/bin/目錄下目錄下Ubuntu支持的支持的Shel

7、l lecho $SHELL命令查看當(dāng)前用戶(hù)的命令查看當(dāng)前用戶(hù)的shelll其他用戶(hù)的其他用戶(hù)的shell,可以在,可以在/etc/passwd文件中看到文件中看到 回目錄回目錄2 shell腳本腳本 shell腳本腳本是利用是利用shell的功能所寫(xiě)的一個(gè)的功能所寫(xiě)的一個(gè)純文本程序純文本程序,將,將各類(lèi)各類(lèi)shell命令預(yù)先放入到一個(gè)文件中,方便一次性執(zhí)行命令預(yù)先放入到一個(gè)文件中,方便一次性執(zhí)行的一個(gè)程序文件,方便管理員進(jìn)行設(shè)置或者管理。的一個(gè)程序文件,方便管理員進(jìn)行設(shè)置或者管理。 lshell腳本與腳本與Windows下的批處理相似,一個(gè)操作執(zhí)行多個(gè)下的批處理相似,一個(gè)操作執(zhí)行多個(gè)命令命令

8、lshell script 提供了數(shù)組、循環(huán)、條件以及邏輯判斷等功能提供了數(shù)組、循環(huán)、條件以及邏輯判斷等功能,可以直接以,可以直接以shell來(lái)寫(xiě)程序,而不必使用類(lèi)似來(lái)寫(xiě)程序,而不必使用類(lèi)似C程序語(yǔ)言等程序語(yǔ)言等傳統(tǒng)程序編寫(xiě)的語(yǔ)法傳統(tǒng)程序編寫(xiě)的語(yǔ)法2.2 執(zhí)行執(zhí)行shell腳本腳本 1. Shell腳本執(zhí)行過(guò)程腳本執(zhí)行過(guò)程 shell按照按照腳本中命令的出現(xiàn)的腳本中命令的出現(xiàn)的順序順序,從上而下、從左而右地,從上而下、從左而右地分析與執(zhí)行分析與執(zhí)行,可以用,可以用“&”把一個(gè)腳本的執(zhí)行放入后臺(tái),但是把一個(gè)腳本的執(zhí)行放入后臺(tái),但是當(dāng)腳本運(yùn)行到最后是不會(huì)等待這個(gè)進(jìn)程的返回結(jié)果,解決方當(dāng)腳本

9、運(yùn)行到最后是不會(huì)等待這個(gè)進(jìn)程的返回結(jié)果,解決方法是在腳本最后放法是在腳本最后放“ wait ” 任何加在任何加在#后面的數(shù)據(jù)將全部被視為批注文字而被忽略后面的數(shù)據(jù)將全部被視為批注文字而被忽略 2.2 執(zhí)行執(zhí)行shell腳本腳本 2. Shell腳本執(zhí)行方式腳本執(zhí)行方式 l直接命令執(zhí)行直接命令執(zhí)行l(wèi)sh/bash 選項(xiàng)選項(xiàng) 腳本名腳本名 lsource 腳本名腳本名2.2 執(zhí)行執(zhí)行shell腳本腳本 2. Shell腳本執(zhí)行方式腳本執(zhí)行方式 l直接命令執(zhí)行直接命令執(zhí)行l(wèi)sh/bash 選項(xiàng)選項(xiàng) 腳本名腳本名 打開(kāi)一個(gè)子打開(kāi)一個(gè)子shell讀取并執(zhí)行腳本中命令。該腳本文件可以讀取并執(zhí)行腳本中命令。

10、該腳本文件可以沒(méi)有沒(méi)有“執(zhí)行權(quán)限執(zhí)行權(quán)限”。sh或或bash在執(zhí)行腳本過(guò)程中,在執(zhí)行腳本過(guò)程中,選項(xiàng)選項(xiàng)如下如下:l-n:不要執(zhí)行不要執(zhí)行script,僅檢查語(yǔ)法的問(wèn)題,僅檢查語(yǔ)法的問(wèn)題l-v:在執(zhí)行在執(zhí)行script前,先將前,先將script的內(nèi)容輸出到屏幕上的內(nèi)容輸出到屏幕上l-x:進(jìn)入跟蹤方式,顯示所執(zhí)行的每一條命令,并且在進(jìn)入跟蹤方式,顯示所執(zhí)行的每一條命令,并且在行首顯示一個(gè)行首顯示一個(gè)“+”號(hào)號(hào)2.2 執(zhí)行執(zhí)行shell腳本腳本 2. Shell腳本執(zhí)行方式腳本執(zhí)行方式 l直接命令執(zhí)行直接命令執(zhí)行l(wèi)sh/bash 選項(xiàng)選項(xiàng) 腳本名腳本名 lsource 腳本名腳本名在當(dāng)前在當(dāng)前b

11、ash環(huán)境下讀取并執(zhí)行腳本中命令環(huán)境下讀取并執(zhí)行腳本中命令該腳本文件可以沒(méi)有該腳本文件可以沒(méi)有“執(zhí)行權(quán)限執(zhí)行權(quán)限”通常用命令通常用命令“.”來(lái)替代來(lái)替代 回目錄回目錄3 shell腳本變量腳本變量 lshell腳本變量腳本變量就是在就是在shell腳本程序中保存,系腳本程序中保存,系統(tǒng)和用戶(hù)所需要的各種各樣的值。統(tǒng)和用戶(hù)所需要的各種各樣的值。lshell腳本變量可以分為:腳本變量可以分為:環(huán)境變量環(huán)境變量系統(tǒng)變量系統(tǒng)變量用戶(hù)自定義變量用戶(hù)自定義變量 3.1 系統(tǒng)變量系統(tǒng)變量 Shell常用的系統(tǒng)變量并不多,在做一些參數(shù)檢測(cè)的時(shí)常用的系統(tǒng)變量并不多,在做一些參數(shù)檢測(cè)的時(shí)候十分有用候十分有用按鍵按

12、鍵命令命令$#命令行參數(shù)的個(gè)數(shù)命令行參數(shù)的個(gè)數(shù)$n當(dāng)前程序的第當(dāng)前程序的第n個(gè)參數(shù),個(gè)參數(shù),n=1,2,.9$0當(dāng)前程序的名稱(chēng)當(dāng)前程序的名稱(chēng)$?執(zhí)行上一個(gè)指令或函數(shù)的返回值執(zhí)行上一個(gè)指令或函數(shù)的返回值$*以以“參數(shù)參數(shù)1 參數(shù)參數(shù)2 . ”形式保存所有參數(shù)形式保存所有參數(shù)$以以“參數(shù)參數(shù)1” “參數(shù)參數(shù)2” . 形式保存所有參數(shù)形式保存所有參數(shù)$本程序的本程序的(進(jìn)程進(jìn)程ID號(hào)號(hào))PID$!上一個(gè)命令的上一個(gè)命令的PID$-顯示顯示shell使用的當(dāng)前選項(xiàng),與使用的當(dāng)前選項(xiàng),與set命令功能相同命令功能相同3.1 系統(tǒng)變量系統(tǒng)變量 例:分析名為例:分析名為sysvar.sh腳本的運(yùn)行結(jié)果。腳本

13、的運(yùn)行結(jié)果。sysvar.sh腳腳本的代碼如下:本的代碼如下: #!/bin/sh#to explain the application of system variables.echo $1 = $1 ; $2 = $2 ;echo the number of parameter is $# ;echo the return code of last command is $?;echo the script name is $0 ;echo the parameters are $* ;echo the parameters are $ ;運(yùn)運(yùn)行行結(jié)結(jié)果果 #!/bin/sh#to exp

14、lain the application of system variables.echo $1 = $1 ; $2 = $2 ;echo the number of parameter is $# ;echo the return code of last command is $?;echo the script name is $0 ;echo the parameters are $* ;echo the parameters are $ ;3.2 環(huán)境變量環(huán)境變量 l登入系統(tǒng)就獲得一個(gè)登入系統(tǒng)就獲得一個(gè)shell它占據(jù)一個(gè)進(jìn)程,輸入的它占據(jù)一個(gè)進(jìn)程,輸入的命令都屬于這個(gè)命令都屬于這個(gè)

15、shell進(jìn)程的子進(jìn)程,選擇此進(jìn)程的子進(jìn)程,選擇此shell后,后,獲得一些環(huán)境設(shè)定,即獲得一些環(huán)境設(shè)定,即環(huán)境變量環(huán)境變量。l環(huán)境變量環(huán)境變量約束約束用戶(hù)行為,也用戶(hù)行為,也幫助幫助實(shí)現(xiàn)很多功能,包括實(shí)現(xiàn)很多功能,包括主目錄的變換、自定義顯示符的提示方法、設(shè)定執(zhí)行文主目錄的變換、自定義顯示符的提示方法、設(shè)定執(zhí)行文件查找的路徑等。件查找的路徑等。常用的環(huán)境變量常用的環(huán)境變量 按鍵按鍵命令命令PATH命令搜索路徑命令搜索路徑,以冒號(hào)為分隔符以冒號(hào)為分隔符.但當(dāng)前目錄不在但當(dāng)前目錄不在系統(tǒng)路徑里系統(tǒng)路徑里HOME用戶(hù)用戶(hù)home目錄的路徑名目錄的路徑名,是是cd命令的默認(rèn)參數(shù)命令的默認(rèn)參數(shù)COLU

16、MNS定義了命令編輯模式下可使用命令行的長(zhǎng)度定義了命令編輯模式下可使用命令行的長(zhǎng)度EDITOR默認(rèn)的行編輯器默認(rèn)的行編輯器VISUAL默認(rèn)的可視編輯器默認(rèn)的可視編輯器FCEDIT命令命令fc使用的編輯器使用的編輯器HISTFILE命令歷史文件命令歷史文件HISTSIZE命令歷史文件中最多可包含的命令條數(shù)命令歷史文件中最多可包含的命令條數(shù)常用的環(huán)境變量常用的環(huán)境變量 按鍵按鍵命令命令HISTFILESI命令歷史文件中包含的最大行數(shù)命令歷史文件中包含的最大行數(shù)IFS定義定義shell使用的分隔符使用的分隔符LOGNAME用戶(hù)登錄名用戶(hù)登錄名MAIL指向一個(gè)需要指向一個(gè)需要shell監(jiān)視修改時(shí)間的文

17、件監(jiān)視修改時(shí)間的文件.當(dāng)該文件當(dāng)該文件修改后修改后,shell發(fā)送消息發(fā)送消息You hava mail給用戶(hù)給用戶(hù)MAILCHECKSHELL檢查檢查MAIL文件的周期文件的周期,單位是秒單位是秒MAILPATH功能與功能與MAIL類(lèi)似類(lèi)似.但可以用一組文件但可以用一組文件,以冒號(hào)分隔以冒號(hào)分隔, 每個(gè)文件后可跟一個(gè)問(wèn)號(hào)和一條發(fā)向用戶(hù)的消息每個(gè)文件后可跟一個(gè)問(wèn)號(hào)和一條發(fā)向用戶(hù)的消息SHELLSHELL的路徑名的路徑名TERM終端類(lèi)型終端類(lèi)型常用的環(huán)境變量常用的環(huán)境變量 按鍵按鍵命令命令TMOUTSHELL自動(dòng)退出的時(shí)間自動(dòng)退出的時(shí)間,單位為秒單位為秒, 0為禁止為禁止SHELL自動(dòng)退出自動(dòng)退

18、出PROMPT_COMMAND指定在主命令提示符前應(yīng)執(zhí)行的命令指定在主命令提示符前應(yīng)執(zhí)行的命令PS1主命令提示符主命令提示符PS2二級(jí)命令提示符二級(jí)命令提示符,命令執(zhí)行過(guò)程中要求輸入數(shù)據(jù)時(shí)命令執(zhí)行過(guò)程中要求輸入數(shù)據(jù)時(shí)用用PS3select的命令提示符的命令提示符PS4調(diào)試命令提示符調(diào)試命令提示符MANPATH尋找手冊(cè)頁(yè)的路徑尋找手冊(cè)頁(yè)的路徑,以冒號(hào)分隔以冒號(hào)分隔LD_LIBRARY_PATH尋找?guī)斓穆窂綄ふ規(guī)斓穆窂?以冒號(hào)分隔以冒號(hào)分隔3.2 環(huán)境變量環(huán)境變量 例:使用例:使用env命令查看環(huán)境變量,并分析。命令查看環(huán)境變量,并分析。為了方便查看,使用重定向命令將環(huán)境變量存儲(chǔ)到為了方便查看,使

19、用重定向命令將環(huán)境變量存儲(chǔ)到enviroment文件中,命令:文件中,命令:env enviroment,然后,然后使用編輯器打開(kāi)該文件使用編輯器打開(kāi)該文件 3.2 環(huán)境變量環(huán)境變量 3.3 用戶(hù)自定義變量用戶(hù)自定義變量 例:哪些變量名是合法的例:哪些變量名是合法的desk&123 456abc desk123 _abc1_123 Add_99l用戶(hù)定義的變量由用戶(hù)定義的變量由字母、數(shù)字及下劃線(xiàn)組成字母、數(shù)字及下劃線(xiàn)組成,變量名第,變量名第一個(gè)字符不能為數(shù)字,變量名是大小寫(xiě)敏感的。一個(gè)字符不能為數(shù)字,變量名是大小寫(xiě)敏感的。lshell中的變量中的變量與與c語(yǔ)言中的變量完全不同,語(yǔ)言中的

20、變量完全不同,不用聲明不用聲明即即可使用,給變量賦值的同時(shí)也就聲明了變量可使用,給變量賦值的同時(shí)也就聲明了變量 3.4 變量的使用變量的使用 l引用引用變量時(shí)在變量名前面加上變量時(shí)在變量名前面加上 $ 符號(hào)符號(hào)l輸出輸出變量時(shí)用變量時(shí)用 echo l如果變量恰巧包含在其他字符串中,為了區(qū)分變?nèi)绻兞壳∏砂谄渌址?,為了區(qū)分變量和其他字符串,需要用量和其他字符串,需要用 將變量名括起來(lái)將變量名括起來(lái) 1. 變量值的引用與輸出變量值的引用與輸出3.4 變量的使用變量的使用 l變量賦值的方式:變量賦值的方式:變量名變量名=值值 2. 變量的賦值和替換變量的賦值和替換例:例: day=mond

21、ay string=welcome!注意注意:給變量賦值的時(shí)候,:給變量賦值的時(shí)候,不能不能在在“=”兩邊兩邊留空格留空格 3.4 變量的使用變量的使用 l重置重置就相當(dāng)于賦給這個(gè)變量另外一個(gè)值就相當(dāng)于賦給這個(gè)變量另外一個(gè)值l清空清空某一變量的值可以使用某一變量的值可以使用unset命令命令 2. 變量的賦值和替換變量的賦值和替換l變量可以有條件的變量可以有條件的替換替換,替換條件放在一對(duì)大括,替換條件放在一對(duì)大括號(hào)號(hào)中中 $variable:-value3.4 變量的使用變量的使用 2. 變量的賦值和替換變量的賦值和替換l第二種替換第二種替換:變量為空時(shí)替換,而且變量的值會(huì):變量為空時(shí)替換,

22、而且變量的值會(huì)發(fā)生改變發(fā)生改變 $variable:=value 3.4 變量的使用變量的使用 2. 變量的賦值和替換變量的賦值和替換l 第三種替換第三種替換:只有當(dāng)變量已賦值時(shí)才用指定值替換:只有當(dāng)變量已賦值時(shí)才用指定值替換$variable: +value 3.5 數(shù)字與數(shù)組的聲明和使用數(shù)字與數(shù)組的聲明和使用 1.數(shù)字與數(shù)組的聲明數(shù)字與數(shù)組的聲明shell中默認(rèn)的賦值是對(duì)字符串賦值中默認(rèn)的賦值是對(duì)字符串賦值 對(duì)數(shù)字或數(shù)組進(jìn)行聲明,則要使用到對(duì)數(shù)字或數(shù)組進(jìn)行聲明,則要使用到declare命令命令 3.5 數(shù)字與數(shù)組的聲明和使用數(shù)字與數(shù)組的聲明和使用 1. 數(shù)字與數(shù)組的聲明數(shù)字與數(shù)組的聲明de

23、clare命令的格式:命令的格式: declare +/- 選項(xiàng)選項(xiàng) variable+/-:指定或關(guān)閉變量的屬性:指定或關(guān)閉變量的屬性a:定義后面名為定義后面名為variable的變量為數(shù)組(的變量為數(shù)組(array)類(lèi)型)類(lèi)型i:定義后面名為定義后面名為variable的變量為整數(shù)數(shù)字(的變量為整數(shù)數(shù)字(integer)類(lèi)型)類(lèi)型x:將后面的將后面的variable變成環(huán)境變量變成環(huán)境變量r:將變量設(shè)置成將變量設(shè)置成readonly類(lèi)型類(lèi)型f:將后面的將后面的variable定義為函數(shù)定義為函數(shù)3.5 數(shù)字與數(shù)組的聲明和使用數(shù)字與數(shù)組的聲明和使用 2. 數(shù)組的使用數(shù)組的使用 數(shù)組下標(biāo)數(shù)組下

24、標(biāo)cong0開(kāi)始,范圍沒(méi)有限制,不必使用連續(xù)分量開(kāi)始,范圍沒(méi)有限制,不必使用連續(xù)分量 name = (value1 . valuen) /此時(shí)下標(biāo)從此時(shí)下標(biāo)從0開(kāi)始開(kāi)始nameindex = value /index為下標(biāo),從為下標(biāo),從0開(kāi)始開(kāi)始例:對(duì)數(shù)組進(jìn)行聲明并賦值例:對(duì)數(shù)組進(jìn)行聲明并賦值declare -a name=(a b c d e f ) /此時(shí)數(shù)組下標(biāo)從此時(shí)數(shù)組下標(biāo)從0開(kāi)始開(kāi)始name0=A /將第一個(gè)元素將第一個(gè)元素a修改為修改為Aname9=j /將第將第10個(gè)元素賦值為個(gè)元素賦值為j3.5 數(shù)字與數(shù)組的聲明和使用數(shù)字與數(shù)組的聲明和使用 2. 數(shù)組的使用數(shù)組的使用 取數(shù)組中

25、的元素的時(shí)候,語(yǔ)法形式如下:取數(shù)組中的元素的時(shí)候,語(yǔ)法形式如下: echo $arrayindex如果想要取數(shù)組的全部元素,則要使用:如果想要取數(shù)組的全部元素,則要使用: echo $array 3.6 shell的輸入的輸入/輸出輸出 1. echo輸出命令輸出命令使用使用echo可以輸出文本或變量到標(biāo)準(zhǔn)輸出,或者把字可以輸出文本或變量到標(biāo)準(zhǔn)輸出,或者把字符串輸入到文件中,它的一般形式為:符串輸入到文件中,它的一般形式為: echo 選項(xiàng)選項(xiàng) 字符串字符串 選項(xiàng):選項(xiàng):-n:輸出后不自動(dòng)換行:輸出后不自動(dòng)換行 -e:?jiǎn)⒂茫簡(jiǎn)⒂谩啊弊址霓D(zhuǎn)換。字符的轉(zhuǎn)換。 3.6 shell的輸入的輸入/輸出

26、輸出 -e:?jiǎn)⒂茫簡(jiǎn)⒂谩啊弊址霓D(zhuǎn)換字符的轉(zhuǎn)換 a 發(fā)出警告聲發(fā)出警告聲 b 刪除前一個(gè)字符刪除前一個(gè)字符 c 最后不加上換行符號(hào)最后不加上換行符號(hào) f 換行但光標(biāo)仍舊停留在原來(lái)的位置換行但光標(biāo)仍舊停留在原來(lái)的位置 n 換行且光標(biāo)移至行首換行且光標(biāo)移至行首 r 光標(biāo)移至行首,但不換行光標(biāo)移至行首,但不換行 t 插入插入tab v 與與f相同相同 插入插入字符字符 x 插入十六進(jìn)制數(shù)所代表的插入十六進(jìn)制數(shù)所代表的ASCII字符字符3.6 shell的輸入的輸入/輸出輸出 1. echo輸出命令輸出命令例:不換行輸出字符例:不換行輸出字符“hello world!” 例:例:t和和n的應(yīng)用的應(yīng)用

27、例:例:x的應(yīng)用的應(yīng)用 3.6 shell的輸入的輸入/輸出輸出 2. read輸入命令輸入命令使用使用read語(yǔ)句語(yǔ)句從鍵盤(pán)或文件的某一行文本中從鍵盤(pán)或文件的某一行文本中讀入信息讀入信息,并將其賦給一個(gè)變量,如果只指定了一個(gè)變量,那,并將其賦給一個(gè)變量,如果只指定了一個(gè)變量,那么么read將會(huì)把所有的輸入賦給該變量,將會(huì)把所有的輸入賦給該變量,直到直到遇到第一遇到第一個(gè)個(gè)文件結(jié)束符文件結(jié)束符或或回車(chē)回車(chē),一般形式為:,一般形式為: read variable1 variable2.lshell用空格作為多個(gè)變量之間的分隔符用空格作為多個(gè)變量之間的分隔符lshell將輸入文本域超長(zhǎng)部分賦予最后

28、一個(gè)變量將輸入文本域超長(zhǎng)部分賦予最后一個(gè)變量 3.6 shell的輸入的輸入/輸出輸出 2. read輸入命令輸入命令例:使用例:使用read語(yǔ)句為語(yǔ)句為name、sex、age三個(gè)變量分別三個(gè)變量分別賦值:賦值:rose、female、30 3.7 運(yùn)算符和特殊字符運(yùn)算符和特殊字符 1. 運(yùn)算符運(yùn)算符運(yùn)算符運(yùn)算符解釋解釋結(jié)合方式結(jié)合方式() 括號(hào)括號(hào)(函數(shù)等函數(shù)等)數(shù)組數(shù)組! 取反取反 按位取反按位取反 + -增量增量 減量減量+ -正號(hào)正號(hào) 負(fù)號(hào)負(fù)號(hào)* / %乘法乘法 除法除法 取模取模+ -加法加法 減法減法左移左移 右移右移3.7 運(yùn)算符和特殊字符運(yùn)算符和特殊字符 運(yùn)算符運(yùn)算符解釋解釋

29、結(jié)合方式結(jié)合方式 = 大于大于 大于等于大于等于= !=等于等于 不等于不等于& 按位與按位與按位異或按位異或|按位或按位或&邏輯與邏輯與|邏輯或邏輯或?:條件條件= += *= /= &=賦值賦值= |= =賦值賦值3.7 運(yùn)算符和特殊字符運(yùn)算符和特殊字符 例:創(chuàng)建例:創(chuàng)建/home/ycs/abc/test文件文件 (不管其是否存在)(不管其是否存在)1. 運(yùn)算符運(yùn)算符3.7 運(yùn)算符和特殊字符運(yùn)算符和特殊字符 2. 特殊字符特殊字符l 反斜線(xiàn)(反斜線(xiàn)() 反斜線(xiàn)反斜線(xiàn)是轉(zhuǎn)義字符,它告訴是轉(zhuǎn)義字符,它告訴Shell不要對(duì)其后面的那個(gè)字符不要對(duì)其后面的那個(gè)字符進(jìn)行特殊處

30、理,只當(dāng)做普通字符即可進(jìn)行特殊處理,只當(dāng)做普通字符即可 例:例:$arr的前面如果加了反斜線(xiàn),那么它就是的前面如果加了反斜線(xiàn),那么它就是普通字符,而不是數(shù)組普通字符,而不是數(shù)組 4 shell控制結(jié)構(gòu)控制結(jié)構(gòu) 4.1 test命令命令4.2 if語(yǔ)句語(yǔ)句 4.3 case語(yǔ)句語(yǔ)句4.4 while語(yǔ)句程序語(yǔ)句程序 4.5 until語(yǔ)句語(yǔ)句 4.6 for語(yǔ)句語(yǔ)句 4.7 循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句 4.1 test命令命令 test命令用于命令用于檢查檢查某個(gè)某個(gè)條件是否成立條件是否成立,如果條件為真,則,如果條件為真,則返回一個(gè)返回一個(gè)0值。如果表達(dá)式不為真,則返回一個(gè)大于值。如果表達(dá)式不為

31、真,則返回一個(gè)大于0的的值,也可以將其稱(chēng)為假值值,也可以將其稱(chēng)為假值 格式為:格式為: test expression 或者或者 expression l 表達(dá)式一般是字符串、整數(shù)或文件和目錄屬性,并且表達(dá)式一般是字符串、整數(shù)或文件和目錄屬性,并且可以包含相關(guān)的運(yùn)算符可以包含相關(guān)的運(yùn)算符 l 運(yùn)算符可以是字符串運(yùn)算符、整數(shù)運(yùn)算符、文件運(yùn)算運(yùn)算符可以是字符串運(yùn)算符、整數(shù)運(yùn)算符、文件運(yùn)算符或布爾運(yùn)算符符或布爾運(yùn)算符 4.1 test命令命令 1.整數(shù)運(yùn)算符整數(shù)運(yùn)算符test命令中,用于比較整數(shù)的關(guān)系運(yùn)算符如下:命令中,用于比較整數(shù)的關(guān)系運(yùn)算符如下: 運(yùn)算符運(yùn)算符解釋解釋-eq兩數(shù)值相等(兩數(shù)值相等

32、(equal)-ne兩數(shù)值不等(兩數(shù)值不等(not equal)-gtn1大于大于n2(greater than)-ltn1小于小于n2(less than)-gen1大于等于大于等于n2(greater than or equal)-len1小于等于小于等于n2(less than or equal)4.1 test命令命令 1.整數(shù)運(yùn)算符整數(shù)運(yùn)算符例:使用例:使用test判斷兩個(gè)數(shù)的大小,并查看返回值情況判斷兩個(gè)數(shù)的大小,并查看返回值情況 4.1 test命令命令 2. 字符串運(yùn)算符字符串運(yùn)算符用于字符串比較時(shí),用于字符串比較時(shí),test的關(guān)系運(yùn)算符如下:的關(guān)系運(yùn)算符如下: 運(yùn)算符運(yùn)算符解

33、釋解釋z string判斷字符串判斷字符串string是否為是否為0,若,若string為空字符串為空字符串,則為,則為truen string判斷字符串判斷字符串string是否為非是否為非0,若,若string為空字符為空字符串,則為串,則為falsetr1=str2判斷兩個(gè)字符串判斷兩個(gè)字符串str1和和 str2是否相等,若相等,是否相等,若相等,則為則為truestr1!=str2判斷兩個(gè)字符串判斷兩個(gè)字符串str1和和 str2是否不相等,若不相是否不相等,若不相等,則為等,則為true4.1 test命令命令 2. 字符串運(yùn)算符字符串運(yùn)算符例:使用例:使用test判斷兩個(gè)字符串是

34、否相等,并查看判斷兩個(gè)字符串是否相等,并查看返回值情況返回值情況 4.1 test命令命令 3. 文件運(yùn)算符文件運(yùn)算符運(yùn)算符運(yùn)算符解解 釋釋-e file判斷判斷file文件名是否存在文件名是否存在-f file判斷判斷file文件名是否存在且為文件文件名是否存在且為文件-d file判斷判斷file文件名是否存在且為目錄(文件名是否存在且為目錄(directory)-b file判斷判斷file文件名是否存在且為一個(gè)文件名是否存在且為一個(gè)block device-c file判斷判斷file文件名是否存在且為一個(gè)文件名是否存在且為一個(gè)character device-S file判斷判斷fi

35、le文件名是否存在且為一個(gè)文件名是否存在且為一個(gè)Socket-P file判斷判斷file文件名是否存在且為一個(gè)文件名是否存在且為一個(gè)FIFO(pipe)-L file判斷判斷file文件名是否存在且為一個(gè)連接文件文件名是否存在且為一個(gè)連接文件-r file判斷判斷file文件名是否存在且具有文件名是否存在且具有“可讀可讀”權(quán)限權(quán)限4.1 test命令命令 3. 文件運(yùn)算符文件運(yùn)算符運(yùn)算符運(yùn)算符解釋解釋-w file判斷判斷file文件名是否存在且具有文件名是否存在且具有“可寫(xiě)可寫(xiě)”權(quán)限權(quán)限-x file判斷判斷file文件名是否存在且具有文件名是否存在且具有“可執(zhí)行可執(zhí)行”權(quán)權(quán)限限-u fi

36、le判斷判斷file文件名是否存在且具有文件名是否存在且具有“SUID”屬性屬性-g file判斷判斷file文件名是否存在且具有文件名是否存在且具有“SGID”屬性屬性-k file判斷判斷file文件名是否存在且具有文件名是否存在且具有“Sticky bit”屬屬性性-s file判斷判斷file文件名是否存在且為文件名是否存在且為“非空白文件非空白文件”file1 nt file2 判斷判斷file1是否比是否比f(wàn)ile2新新(newe than)file1 ot file2 判斷判斷file2是否比是否比f(wàn)ile2舊舊(older than)file1 ef file2 判斷判斷fil

37、e1與與file2是否為同一文件是否為同一文件4.1 test命令命令 3. 文件運(yùn)算符文件運(yùn)算符例:判斷文件是否存在,并查看返回值情況例:判斷文件是否存在,并查看返回值情況 4.1 test命令命令 4. 邏輯運(yùn)算符邏輯運(yùn)算符例:判斷例:判斷$num的值是否在的值是否在10和和20之間之間 運(yùn)算符運(yùn)算符解釋解釋-a邏輯與邏輯與-o邏輯或邏輯或!邏輯非邏輯非4.2 if語(yǔ)句語(yǔ)句 if語(yǔ)句的結(jié)構(gòu)分為:語(yǔ)句的結(jié)構(gòu)分為:l 單分支單分支if語(yǔ)句語(yǔ)句l 雙分支雙分支if語(yǔ)句語(yǔ)句l 多分支多分支if語(yǔ)句語(yǔ)句 只判斷指定的條件,當(dāng)條件成立時(shí)執(zhí)行相應(yīng)的操作,否則只判斷指定的條件,當(dāng)條件成立時(shí)執(zhí)行相應(yīng)的操作,

38、否則不做任何操作。不做任何操作。格式為:格式為:if 條件測(cè)試命令條件測(cè)試命令then 命令序列命令序列fi4.2 if語(yǔ)句語(yǔ)句 例:輸入一個(gè)整數(shù),判斷該數(shù)是否等于例:輸入一個(gè)整數(shù),判斷該數(shù)是否等于0。腳本如下:。腳本如下: #!/bin/bashread -p please input a number: numif $num = 0 then echo the number of you input is 0fi4.2 if語(yǔ)句語(yǔ)句 if語(yǔ)句的結(jié)構(gòu)分為:語(yǔ)句的結(jié)構(gòu)分為:l 單分支單分支if語(yǔ)句語(yǔ)句l 雙分支雙分支if語(yǔ)句語(yǔ)句雙分支的雙分支的if語(yǔ)句在條件成立或不成立的時(shí)候分別執(zhí)行不同的語(yǔ)句

39、在條件成立或不成立的時(shí)候分別執(zhí)行不同的命令序列。格式為:命令序列。格式為:0?是是否否if 條件測(cè)試命令條件測(cè)試命令then 命令序列命令序列1else 命令序列命令序列2fi4.2 if語(yǔ)句語(yǔ)句 if語(yǔ)句的結(jié)構(gòu)分為:語(yǔ)句的結(jié)構(gòu)分為:l 單分支單分支if語(yǔ)句語(yǔ)句l 雙分支雙分支if語(yǔ)句語(yǔ)句l 多分支多分支if語(yǔ)句語(yǔ)句 在在shell腳本中,腳本中,if語(yǔ)句能夠嵌套使用,進(jìn)行多次判斷語(yǔ)句能夠嵌套使用,進(jìn)行多次判斷 。格式為:格式為:if 條件測(cè)試命令條件測(cè)試命令1then 命令序列命令序列1elif 條件測(cè)試命令條件測(cè)試命令2 then命令序列命令序列2 else命令序列命令序列3fi 成立?成

40、立?是是否否成立?成立?是是否否4.2 if語(yǔ)句語(yǔ)句 例:編寫(xiě)腳本,根據(jù)用戶(hù)輸入的字符判斷例:編寫(xiě)腳本,根據(jù)用戶(hù)輸入的字符判斷 #!/bin/bashread -p please input a (Y/N): strif $str = Y | $str = y then echo OK,please continue elif $str = N | $str = n then echo please try againelseecho please input y/Y or n/Nficase語(yǔ)句的格式為:語(yǔ)句的格式為:case $變量名變量名 in模式模式1)命令序列命令序列1;模式模式2)

41、命令序列命令序列2 ;*)默認(rèn)執(zhí)行的命令序列默認(rèn)執(zhí)行的命令序列esac 4.3 case語(yǔ)句語(yǔ)句 case行尾必須為單詞行尾必須為單詞“in”每一個(gè)模式必須以右括號(hào)每一個(gè)模式必須以右括號(hào)“)”結(jié)結(jié)束束兩個(gè)分號(hào)兩個(gè)分號(hào)“;”表示命令序列結(jié)束表示命令序列結(jié)束匹配模式中可是使用方括號(hào)表示一匹配模式中可是使用方括號(hào)表示一個(gè)連續(xù)的范圍,如個(gè)連續(xù)的范圍,如0-9使用豎杠符號(hào)使用豎杠符號(hào)“|”表示或。表示或。最后的最后的“*)”表示默認(rèn)模式,當(dāng)使表示默認(rèn)模式,當(dāng)使用前面的各種模式均無(wú)法匹配該變量用前面的各種模式均無(wú)法匹配該變量時(shí),將執(zhí)行時(shí),將執(zhí)行“*)”后的命令序列后的命令序列 例:編寫(xiě)腳本例:編寫(xiě)腳本sh

42、ell,從鍵盤(pán)輸入數(shù)字,從鍵盤(pán)輸入數(shù)字 1、2、3#!/bin/bashread -p please input a (Y/N): numcase $num in 1) echo the number of you input is 1 ; 2) echo the number of you input is 2 ; 3) echo the number of you input is 3 ; *) echo the number of you input is 1 2 3 ;esac 4.3 case語(yǔ)句語(yǔ)句 while語(yǔ)句語(yǔ)句是是shell提供的一種提供的一種循環(huán)循環(huán)機(jī)制,當(dāng)條件為真的機(jī)制

43、,當(dāng)條件為真的時(shí)候它允許循環(huán)體中的命令繼續(xù)執(zhí)行。否則退出循環(huán)時(shí)候它允許循環(huán)體中的命令繼續(xù)執(zhí)行。否則退出循環(huán) 4.4 while語(yǔ)句語(yǔ)句 while 條件測(cè)試命令條件測(cè)試命令 do命令序列命令序列done 語(yǔ)句格式:語(yǔ)句格式:例:編寫(xiě)腳本,輸入整數(shù)例:編寫(xiě)腳本,輸入整數(shù)n,計(jì)算,計(jì)算1到到n的和的和 4.4 while語(yǔ)句語(yǔ)句 #!/bin/bashread -p please input a number: nsum=0i=1while $i -le $n do sum=$sum+$ii=$i+1doneecho the sum of 1+2+3+.n is $sumuntil語(yǔ)句語(yǔ)句是當(dāng)是當(dāng)

44、條件滿(mǎn)足時(shí)退出循環(huán)條件滿(mǎn)足時(shí)退出循環(huán),否則執(zhí)行,否則執(zhí)行循環(huán),循環(huán),語(yǔ)句格式為:語(yǔ)句格式為: 4.5 until語(yǔ)句語(yǔ)句 while 條件測(cè)試命令條件測(cè)試命令 do命令序列命令序列done例:編寫(xiě)腳本,輸入整數(shù)例:編寫(xiě)腳本,輸入整數(shù)n,計(jì)算,計(jì)算1到到n的和的和 4.5 until語(yǔ)句語(yǔ)句 #!/bin/bashread -p please input a number: nsum=0i=1until $i -gt $n do sum=$sum+$i i=$i+1doneecho the sum of 1+2+3+.n is $sumfor語(yǔ)句的格式:語(yǔ)句的格式: 4.6 for語(yǔ)句語(yǔ)句 fo

45、r 變量名變量名 in 取值列表取值列表 do 命令序列命令序列 done 例:計(jì)算例:計(jì)算1到到n的和的和 #!/bin/bashread -p please input a number: nsum=0i=1for i in seq 1 $n dosum=$sum+$ii=$i+1 doneecho the sum of 1+2+3+.n is $sum1. break語(yǔ)句語(yǔ)句 4.7 循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句 break語(yǔ)句用于語(yǔ)句用于for、while和和until循環(huán)語(yǔ)句中,忽略循循環(huán)語(yǔ)句中,忽略循環(huán)體中任何其他語(yǔ)句和循環(huán)條件的限制,強(qiáng)行退出循環(huán)環(huán)體中任何其他語(yǔ)句和循環(huán)條件的限制,強(qiáng)

46、行退出循環(huán)例:編寫(xiě)腳本,輸入整數(shù)例:編寫(xiě)腳本,輸入整數(shù)n,但我們只計(jì)算,但我們只計(jì)算1到到10的和的和 4.7 循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句 #!/bin/bashread -p please input a number: nsum=0i=1for i in seq 1 $n do if $i -gt 10 then break fi sum=$sum+$i i=$i+1doneecho the sum of 1+2+3+.n is $sum2. continu語(yǔ)句語(yǔ)句 4.7 循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句 continue語(yǔ)句應(yīng)用在語(yǔ)句應(yīng)用在for、while和和until語(yǔ)句中,用于讓語(yǔ)句中,用

47、于讓腳本跳過(guò)其后面的語(yǔ)句,執(zhí)行下一次循環(huán)腳本跳過(guò)其后面的語(yǔ)句,執(zhí)行下一次循環(huán) 例:編寫(xiě)腳本,輸入整數(shù)例:編寫(xiě)腳本,輸入整數(shù)n,計(jì)算,計(jì)算1到到n的奇數(shù)和的奇數(shù)和 #!/bin/bashread -p please input a number: nsum=0i=1 4.7 循環(huán)控制語(yǔ)句循環(huán)控制語(yǔ)句 for i in seq 1 $ndoif $i%2 -eq 0 then i=$i+1 continue fisum=$sum+$ii=$i+1doneecho the sum of 1+2+3+.n is $sum回目錄回目錄5 Shell函數(shù)函數(shù) 5.1 函數(shù)的聲明函數(shù)的聲明5.2 函數(shù)的調(diào)用

48、函數(shù)的調(diào)用 5.3 函數(shù)的參數(shù)傳遞函數(shù)的參數(shù)傳遞shell函數(shù)允許將一組命令或語(yǔ)句形成一個(gè)可函數(shù)允許將一組命令或語(yǔ)句形成一個(gè)可用語(yǔ)句塊。用語(yǔ)句塊。shell把函數(shù)塊存放在內(nèi)存中,節(jié)省了程序加把函數(shù)塊存放在內(nèi)存中,節(jié)省了程序加載的時(shí)間;載的時(shí)間;shell以一種內(nèi)部格式來(lái)存放這些函數(shù),節(jié)省以一種內(nèi)部格式來(lái)存放這些函數(shù),節(jié)省了解釋的時(shí)間;了解釋的時(shí)間; 函數(shù)組成函數(shù)組成:函數(shù)名和函數(shù)體:函數(shù)名和函數(shù)體函數(shù)在使用前必須聲明,有兩種格式:函數(shù)在使用前必須聲明,有兩種格式:5.1 函數(shù)的聲明函數(shù)的聲明 function函數(shù)名()函數(shù)名() 命令命令1 函數(shù)名()函數(shù)名()命令命令1 例:定義一個(gè)函數(shù),腳

49、本如下例:定義一個(gè)函數(shù),腳本如下 5.1 函數(shù)的聲明函數(shù)的聲明 #!/bin/bashhello () echo todays date is date hello 5.2 函數(shù)的調(diào)用函數(shù)的調(diào)用 函數(shù)的調(diào)用:函數(shù)的調(diào)用:1. 在同一個(gè)腳本中,使用函數(shù)名直接調(diào)用函數(shù)在同一個(gè)腳本中,使用函數(shù)名直接調(diào)用函數(shù) 2. 函數(shù)在另外一個(gè)腳本中,調(diào)用方法函數(shù)在另外一個(gè)腳本中,調(diào)用方法例:兩個(gè)腳本文件例:兩個(gè)腳本文件/home/ycs/func.sh和和/home/ycs/shell-test/while.sh,它們不在同一目錄,它們不在同一目錄 腳本腳本func.sh的代碼的代碼 #!/bin/bashecho todays date is date腳本腳本/home/ycs/shell-test/while.sh的代碼中定義了函數(shù)的代碼中定義了函數(shù) func.sh中調(diào)用中調(diào)用while.sh,需要將需要將func.sh的代碼:的代碼: #!/bin/bashfunction haha n=50 sum=0 i=1 for i in seq 1 $n do sum=$sum+$i i=$i+1 doneecho the sum of 1+2+3+.n is $sumhaha #!/

溫馨提示

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

評(píng)論

0/150

提交評(píng)論