LinuxBashShell快速入門_第1頁
LinuxBashShell快速入門_第2頁
LinuxBashShell快速入門_第3頁
LinuxBashShell快速入門_第4頁
LinuxBashShell快速入門_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、BASH 的基本語法 最簡單的例子 Hello World! 關(guān)于輸入、輸出和錯(cuò)誤輸出 BASH 中對變量的規(guī)定(與 C 語言的異同) BASH 中的基本流程控制語法 函數(shù)的使用2.1 最簡單的例子 Hello World!幾乎所有的講解編程的書給讀者的第一個(gè)例子都是 Hello World 程序,那么我們今天也就從這個(gè)例子出發(fā),來逐步了解 BASH。用 vi 編輯器編輯一個(gè)hello 文件如下:#!/bin/bash# This is a very simple exampleecho Hello World這樣最簡單的一個(gè) BASH 程序就編寫完了。這里有幾個(gè)問題需要說明一下:一,第一行的

2、 #! 是什么意思二,第一行的 /bin/bash 又是什么意思三,第二行是注釋嗎四,echo 語句五,如何執(zhí)行該程序#! 是說明 hello 這個(gè)文件的類型的,有點(diǎn)類似于 Windows 系統(tǒng)下用不同文件后綴來表示不同文件類型的意思(但不相同)。Linux 系統(tǒng)根據(jù) #! 及該字串后面的信息確定該文件的類型,關(guān)于這一問題同學(xué)們回去以后可以通過 man magic命令 及 /usr/share/magic 文件來了解這方面的更多內(nèi)容。在 BASH 中 第一行的 #! 及后面的 /bin/bash 就表明該文件是一個(gè) BASH 程序,需要由 /bin 目錄下的 bash 程序來解釋執(zhí)行。BASH

3、 這個(gè)程序一般是存放在 /bin 目錄下,如果你的 Linux 系統(tǒng)比較特別,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 這樣的目錄下;如果還找不到,你可以用 locate bash find / -name bash 2 /dev/null 或 whereis bash 這三個(gè)命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己動手安裝一個(gè) BASH 軟件包了。第二行的 # This is a . 就是 BASH 程序的注釋,在 BASH 程序中從“#”號(注意:后面緊接著是

4、“!”號的除外)開始到行尾的多有部分均被看作是程序的注釋。的三行的 echo 語句的功能是把 echo 后面的字符串輸出到標(biāo)準(zhǔn)輸出中去。由于 echo 后跟的是 Hello World 這個(gè)字符串,因此 Hello World這個(gè)字串就被顯示在控制臺終端的屏幕上了。需要注意的是 BASH 中的絕大多數(shù)語句結(jié)尾處都沒有分號。如何執(zhí)行該程序呢?有兩種方法:一種是顯式制定 BASH 去執(zhí)行:$ bash hello 或$ sh hello (這里 sh 是指向 bash 的一個(gè)鏈接,“l(fā)rwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh - bash”)或者可以

5、先將 hello 文件改為可以執(zhí)行的文件,然后直接運(yùn)行它,此時(shí)由于 hello 文件第一行的 #! /bin/bash 的作用,系統(tǒng)會自動用/bin/bash 程序去解釋執(zhí)行 hello 文件的:$ chmod u+x hello$ ./hello此處沒有直接 “$ hello”是因?yàn)楫?dāng)前目錄不是當(dāng)前用戶可執(zhí)行文件的默認(rèn)目錄,而將當(dāng)前目錄“.”設(shè)為默認(rèn)目錄是一個(gè)不安全的設(shè)置。需要注意的是,BASH 程序被執(zhí)行后,實(shí)際上 Linux 系統(tǒng)是另外開設(shè)了一個(gè)進(jìn)程來運(yùn)行的。2.2 關(guān)于輸入、輸出和錯(cuò)誤輸出在字符終端環(huán)境中,標(biāo)準(zhǔn)輸入/標(biāo)準(zhǔn)輸出的概念很好理解。輸入即指對一個(gè)應(yīng)用程序 或命令的輸入,無論是從

6、鍵盤輸入還是從別的文件輸入;輸出即指應(yīng)用程序或命令產(chǎn)生的一些信息;與 Windows 系統(tǒng)下不同的是,Linux 系統(tǒng)下還有一個(gè)標(biāo)準(zhǔn)錯(cuò)誤輸出的概念,這個(gè)概念主要是為程序調(diào)試和系統(tǒng)維護(hù)目的而設(shè)置的,錯(cuò)誤輸出于標(biāo)準(zhǔn)輸出分開可以讓一些高級的錯(cuò)誤信息不干擾正常的輸出 信息,從而方便一般用戶的使用。在 Linux 系統(tǒng)中:標(biāo)準(zhǔn)輸入(stdin)默認(rèn)為鍵盤輸入;標(biāo)準(zhǔn)輸出(stdout)默認(rèn)為屏幕輸出;標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr)默認(rèn)也是輸出到屏幕(上面的 std 表示 standard)。在 BASH 中使用這些概念時(shí)一般將標(biāo)準(zhǔn)輸出表示為 1,將標(biāo)準(zhǔn)錯(cuò)誤輸出表示為 2。下面我們舉例來說明如何使用他們,特別

7、是標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出。輸入、輸出及標(biāo)準(zhǔn)錯(cuò)誤輸出主要用于 I/O 的重定向,就是說需要改變他們的默認(rèn)設(shè)置。先看這個(gè)例子:$ ls ls_result$ ls -l ls_result上面這兩個(gè)命令分別將 ls 命令的結(jié)果輸出重定向到 ls_result 文件中和追加到 ls_result 文件中,而不是輸出到屏幕上。就是輸出(標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出)重定向的代表符號,連續(xù)兩個(gè) 符號,即 則表示不清除原來的而追加輸出。下面再來看一個(gè)稍微復(fù)雜的例子:$ find /home -name lost* 2 err_result這個(gè)命令在 符號之前多了一個(gè) 2,2 表示將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向。由于 /h

8、ome 目錄下有些目錄由于權(quán)限限制不能訪問,因此會產(chǎn)生一些標(biāo)準(zhǔn)錯(cuò)誤輸出被存放在 err_result 文件中。大家可以設(shè)想一下find /home -name lost* 2err_result命令會產(chǎn)生什么結(jié)果?如果直接執(zhí)行find /home -name lost* all_result,其結(jié)果是只有標(biāo)準(zhǔn)輸出被存入 all_result 文件中,要想讓標(biāo)準(zhǔn)錯(cuò)誤輸出和標(biāo)準(zhǔn)輸入一樣都被存入到文件中,那該怎么辦呢?看下面這個(gè)例子:$ find /home -name lost* all_result 2& 1上面這個(gè)例子中將首先將標(biāo)準(zhǔn)錯(cuò)誤輸出也重定向到標(biāo)準(zhǔn)輸出中,再將標(biāo)準(zhǔn)輸出重定向到 all_r

9、esult 這個(gè)文件中。這樣我們就可以將所有的輸出都存儲到文件中了。為實(shí)現(xiàn)上述功能,還有一種簡便的寫法如下:$ find /home -name lost* & all_result如果那些出錯(cuò)信息并不重要,下面這個(gè)命令可以讓你避開眾多無用出錯(cuò)信息的干擾:$find /home -name lost* 2 /dev/null同學(xué)們回去后還可以再試驗(yàn)一下如下幾種重定向方式,看看會出什么結(jié)果,為什么?$ find /home -name lost* all_result 1& 2$ find /home -name lost* 2 all_result 1& 2$ find /home -name

10、 lost* 2& 1 all_result另外一個(gè)非常有用的重定向操作符是-,請看下面這個(gè)例子:$ (cd /source/directory & tar cf - . ) | (cd /dest/directory & tar xvfp -)該命令表示把 /source/directory 目錄下的所有文件通過壓縮和解壓,快速的全部移動到 /dest/directory 目錄下去,這個(gè)命令在 /source/directory 和 /dest/directory 不處在同一個(gè)文件系統(tǒng)下時(shí)將顯示出特別的優(yōu)勢。下面還幾種不常見的用法:n&- 表示將 n 號輸入關(guān)閉&- 表示將 n 號輸出關(guān)閉&

11、- 表示將標(biāo)準(zhǔn)輸出關(guān)閉2.3 BASH 中對變量的規(guī)定(與 C 語言的異同)好了下面我們進(jìn)入正題,先看看 BASH 中的變量是如何定義和使用的。對于熟悉 C 語言的程序員,我們將解釋 BASH 中的定義和用法與 C 語言中有何不同。2.3.1. BASH 中的變量介紹我們先來從整體上把握一下 BASH 中變量的用法,然后再去分析 BASH 中變量使用與 C 語言中的不同。BASH 中的變量都是不能含有保留字,不能含有 - 等保留字符,也不能含有空格。2.3.1.1 簡單變量在 BASH 中變量定義是不需要的,沒有 int i 這樣的定義過程。如果想用一個(gè)變量,只要他沒有在前面被定義過,就直接可

12、以用,當(dāng)然你使用該變量的第一條語句應(yīng)該是對他賦初值了,如果你不賦初值也沒關(guān) 系,只不過該變量是空( 注意:是 NULL,不是 0 )。不給變量賦初值雖然語法上不反對,但不是一個(gè)好的編程習(xí)慣。好了我們看看下面的例子:首先用 vi 編輯下面這個(gè)文件 hello2:#!/bin/bash# give the initialize value to STRSTR=Hello Worldecho $STR在上面這個(gè)程序中我們需要注意下面幾點(diǎn):一,變量賦值時(shí),=左右兩邊都不能有空格;二,BASH 中的語句結(jié)尾不需要分號(;);三,除了在變量賦值和在FOR循環(huán)語句頭中,BASH 中的變量使用必須在變量前加$

13、符號,同學(xué)們可以將上面程序中第三行改為 echo STR 再試試,看看會出什么結(jié)果。=output: STR四,由于 BASH 程序是在一個(gè)新的進(jìn)程中運(yùn)行的,所以該程序中的變量定義和賦值不會改變其他進(jìn)程或原始 Shell 中同名變量的值,也不會影響他們的運(yùn)行。更細(xì)致的文檔甚至提到以但引號括起來的變量將不被 BASH 解釋為變量,如$STR,而被看成為純粹的字符串。而且更為標(biāo)準(zhǔn)的變量引用方式是 $STR 這樣的,$STR 自不過是對 $STR 的一種簡化。在復(fù)雜情況下(即有可能產(chǎn)生歧義的地方)最好用帶 的表示方式。BASH 中的變量既然不需要定義,也就沒有類型一說,一個(gè)變量即可以被定義為一個(gè)字符

14、串,也可以被再定義為整數(shù)。如果對該變量進(jìn)行整數(shù)運(yùn)算,他就被解釋為整數(shù);如果對他進(jìn)行字符串操作,他就被看作為一個(gè)字符串。請看下面的例子:#!/bin/bashx=1999let x = $x + 1echo $xx=olympic$xecho $x關(guān)于整數(shù)變量計(jì)算,有如下幾種:+ - * / % ,他們的意思和字面意思相同。整數(shù)運(yùn)算一般通過 let 和 expr 這兩個(gè)指令來實(shí)現(xiàn),如對變量 x 加 1 可以寫作:letx = $x + 1或者x=expr $x + 1(zhuyi:=左右沒有空格;+左右必須有空格)在比較操作上,整數(shù)變量和字符串變量各不相同,詳見下表:(gtgreater the

15、n ltless then gegreater equal)對應(yīng)的操作整數(shù)操作字符串操作相同-eq=不同-ne!=大于-gt小于-lt大于或等于-ge小于或等于-le為空-z不為空-n比如:比較字符串 a 和 b 是否相等就寫作:if $a = $b (主意空格)判斷字符串 a 是否為空就寫作:if -z $a 判斷整數(shù)變量 a 是否大于 b 就寫作:if $a -gt $b 更細(xì)致的文檔推薦在字符串比較時(shí)盡量不要使用 -n ,而用 ! -z 來代替。(其中符號 ! 表示求反操作)BASH 中的變量除了用于對 整數(shù) 和 字符串 進(jìn)行操作以外,另一個(gè)作用是作為文件變量。BASH 是 Linux

16、操作系統(tǒng)的 Shell,因此系統(tǒng)的文件必然是 BASH 需要操作的重要對象,如if -x /root 可以用于判斷 /root 目錄是否可以被當(dāng)前用戶進(jìn)入。下表列出了 BASH 中用于判斷文件屬性的操作符:運(yùn)算符含義( 滿足下面要求時(shí)返回 TRUE )-e file文件 file 已經(jīng)存在-f file文件 file 是普通文件-s file文件 file 大小不為零-d file文件 file 是一個(gè)目錄-r file文件 file 對當(dāng)前用戶可以讀取-w file文件 file 對當(dāng)前用戶可以寫入-x file文件 file 對當(dāng)前用戶可以執(zhí)行-g file文件 file 的 GID 標(biāo)志

17、被設(shè)置-u file文件 file 的 UID 標(biāo)志被設(shè)置-O file文件 file 是屬于當(dāng)前用戶的-G file文件 file 的組 ID 和當(dāng)前用戶相同file1 -nt file2文件 file1 比 file2 更新file1 -ot file2文件 file1 比 file2 更老注意:上表中的 file 及 file1、file2 都是指某個(gè)文件或目錄的路徑。2.3.1.1. 關(guān)于局部變量在 BASH 程序中如果一個(gè)變量被使用了,那么直到該程序的結(jié)尾,該變量都一直有效。為了使得某個(gè)變量存在于一個(gè)局部程序塊中,就引入了局部變量的概念。BASH 中,在變量首次被賦初值時(shí)加上 loc

18、al 關(guān)鍵字就可以聲明一個(gè)局部變量,如下面這個(gè)例子:#!/bin/bashHELLO=Hellofunction hello local HELLO=Worldecho $HELLOecho $HELLOhelloecho $HELLO該程序的執(zhí)行結(jié)果是:HelloWorldHello這個(gè)執(zhí)行結(jié)果表明全局變量 $HELLO 的值在執(zhí)行函數(shù) hello 時(shí)并沒有被改變。也就是說局部變量$HELLO 的影響只存在于函數(shù)那個(gè)程序塊中。2.3.2. BASH 中的變量與 C 語言中變量的區(qū)別這里我們?yōu)樵瓉聿皇煜?BASH 編程,但是非常熟悉 C 語言的程序員總結(jié)一下在 BASH 環(huán)境中使用變量需要注意

19、的問題。1,BASH 中的變量在引用時(shí)都需要在變量前加上 $ 符號( 第一次賦值及在For循環(huán)的頭部不用加 $符號 );2,BASH 中沒有浮點(diǎn)運(yùn)算,因此也就沒有浮點(diǎn)類型的變量可用;3,BASH 中的整形變量的比較符號與 C 語言中完全不同,而且整形變量的算術(shù)運(yùn)算也需要經(jīng)過 let 或 expr 語句來處理;2.4 BASH 中的基本流程控制語法BASH 中幾乎含有 C 語言中常用的所有控制結(jié)構(gòu),如條件分支、循環(huán)等,下面逐一介紹。2.4.1 if.then.elseif 語句用于判斷和分支,其語法規(guī)則和 C 語言的 if 非常相似。其幾種基本結(jié)構(gòu)為:(主意空格)if expression th

20、enstatmentsfi或者if expression thenstatmentselsestatmentsfi或者if expression thenstatmentselse if expression thenstatmentselsestatmentsfi或者if expression thenstatmentselif expression thenstatmentselsestatmentsfi值得說明的是如果你將 if 和 then 簡潔的寫在一行里面,就必須在 then 前面加上分號,如:if expression ; then . 。下面這個(gè)例子說明了如何使用 if 條件判

21、斷語句:#!/bin/bashif $1 -gt 90 thenecho Good, $1elif $1 -gt 70 thenecho OK, $1elseecho Bad, $1fiexit 0上面例子中的 $1 是指命令行的第一個(gè)參數(shù),這個(gè)會在后面的“BASH 中的特殊保留字”中講解。2.4.2 forfor 循環(huán)結(jié)構(gòu)與 C 語言中有所不同,在 BASH 中 for 循環(huán)的基本結(jié)構(gòu)是:for $var indostatmentsdone其中 $var 是循環(huán)控制變量,是 $var 需要遍歷的一個(gè)集合,do/done 對包含了循環(huán)體,相當(dāng)于 C 語言中的一對大括號。另外如果do 和 for

22、 被寫在同一行,必須在 do 前面加上 ;。如:for $var in; do 。下面是一個(gè)運(yùn)用 for 進(jìn)行循環(huán)的例子:#!/bin/bashfor day in Sun Mon Tue Wed Thu Fri Satdoecho $daydone# 如果列表被包含在一對雙引號中,則被認(rèn)為是一個(gè)元素for day in Sun Mon Tue Wed Thu Fri Satdoecho $daydoneexit 0注意上面的例子中,在 for 所在那行的變量 day 是沒有加 $ 符號的,而在循環(huán)體內(nèi),echo 所在行變量 $day 是必須加上 $ 符號的。另外如果寫成 for day 而沒

23、有后面的 in部分,則 day 將取遍命令行的所有參數(shù)。如這個(gè)程序:#!/bin/bashfor paramdoecho $paramdoneexit 0上面這個(gè)程序?qū)⒘谐鏊忻钚袇?shù)。for 循環(huán)結(jié)構(gòu)的循環(huán)體被包含在 do/done 對中,這也是后面的 while、until 循環(huán)所具有的特點(diǎn)。2.4.3 whilewhile 循環(huán)的基本結(jié)構(gòu)是:(空格)while condition dostatmentsdone這個(gè)結(jié)構(gòu)請大家自己編寫一個(gè)例子來驗(yàn)證。2.4.4 untiluntil 循環(huán)的基本結(jié)構(gòu)是:until condition is TRUE dostatmentsdone這個(gè)結(jié)構(gòu)也

24、請大家自己編寫一個(gè)例子來驗(yàn)證。2.4.5 caseBASH 中的 case 結(jié)構(gòu)與 C 語言中的 switch 語句的功能比較類似,可以用于進(jìn)行多項(xiàng)分支控制。其基本結(jié)構(gòu)是:case $var incondition1 )statments1;condition2 )statments2;.* )default statments;esac下面這個(gè)程序是運(yùn)用 case 結(jié)構(gòu)進(jìn)行分支執(zhí)行的例子:#!/bin/bashecho Hit a key, then hit return.read Keypresscase $Keypress in(這個(gè)雙引號可以不要)a-z ) echo Lowercas

25、e letter;A-Z ) echo Uppercase letter;0-9 ) echo Digit;* ) echo Punctuation, whitespace, or other;esacexit 0上面例子中的第四行 read Keypress 一句中的 read 語句表示從鍵盤上讀取輸入。這個(gè)命令將在本講義的BASH 的其他高級問題中講解。2.4.6 break/continue熟悉 C 語言編程的都很熟悉 break 語句和 continue 語句。BASH 中同樣有這兩條語句,而且作用和用法也和 C 語言中相同,break 語句可以讓程序流程從當(dāng)前循環(huán)體中完全跳出,而 c

26、ontinue 語句可以跳過當(dāng)次循環(huán)的剩余部分并直接進(jìn)入下一次循環(huán)。2.5 函數(shù)的使用BASH 是一個(gè)相對簡單的腳本語言,不過為了方便結(jié)構(gòu)化的設(shè)計(jì),BASH 中也提供了函數(shù)定義的功能。BASH 中的函數(shù)定義很簡單,只要向下面這樣寫就可以了:function my_funcname code block或者my_funcname() code block上面的第二種寫法更接近于 C 語言中的寫法。BASH 中要求函數(shù)的定義必須在函數(shù)使用之前,這是和 C 語言用頭文件說明函數(shù)方法的不同。更進(jìn)一步的問題是如何給函數(shù)傳遞參數(shù)和獲得返回值。BASH 中函數(shù)參數(shù)的定義并不需要在函數(shù)定義處就制定,而只需要在

27、函數(shù)被調(diào)用時(shí)用 BASH 的保留變量 $1 $2 . 來引用就可以了;BASH 的返回值可以用 return 語句來指定返回一個(gè)特定的整數(shù),如果沒有 return 語句顯式的返回一個(gè)返回值,則返回值就是該函數(shù)最后一條語句執(zhí)行的結(jié)果(一般為 0,如果執(zhí)行失敗返回錯(cuò)誤碼)。函數(shù)的返回值在調(diào)用該函數(shù)的程序體中通過 $? 保留字來獲得。下面我們就來看一個(gè)用函數(shù)來計(jì)算整數(shù)平方的例子:#!/bin/bashsquare() let res = $1 * $1return $ressquare $1result=$?echo $resultexit 0BASH 中的特殊保留字 保留變量 隨機(jī)數(shù) 運(yùn)算符 變量

28、的特殊操作3.1 保留變量BASH 中有一些保留變量,下面列出了一些:$IFS這個(gè)變量中保存了用于分割輸入?yún)?shù)的分割字符,默認(rèn)識空格。$HOME 這個(gè)變量中存儲了當(dāng)前用戶的根目錄路徑。$PATH 這個(gè)變量中存儲了當(dāng)前 Shell 的默認(rèn)路徑字符串。$PS1表示第一個(gè)系統(tǒng)提示符。$PS2表示的二個(gè)系統(tǒng)提示符。$PWD表示當(dāng)前工作路徑。$EDITOR 表示系統(tǒng)的默認(rèn)編輯器名稱。$BASH 表示當(dāng)前 Shell 的路徑字符串。$0, $1, $2, .表示系統(tǒng)傳給腳本程序或腳本程序傳給函數(shù)的第0個(gè)、第一個(gè)、第二個(gè)等參數(shù)。$#表示腳本程序的命令參數(shù)個(gè)數(shù)或函數(shù)的參數(shù)個(gè)數(shù)。$表示該腳本程序的進(jìn)程號,常用于

29、生成文件名唯一的臨時(shí)文件。$?表示腳本程序或函數(shù)的返回狀態(tài)值,正常為 0,否則為非零的錯(cuò)誤號。$*表示所有的腳本參數(shù)或函數(shù)參數(shù)。$和 $* 涵義相似,但是比 $* 更安全。$!表示最近一個(gè)在后臺運(yùn)行的進(jìn)程的進(jìn)程號。3.2隨機(jī)數(shù)隨機(jī)數(shù)是經(jīng)常要用到的,BASH 中也提供了這個(gè)功能,請看下面這個(gè)程序:#!/bin/bash# Prints different random integer from 1 to 65536a=$RANDOMecho $aexit 0這個(gè)程序可以在每次執(zhí)行的時(shí)候隨機(jī)的打印出一個(gè)大小在1 到 65536之間的整數(shù)。3.3 運(yùn)算符算術(shù)運(yùn)算符+ - * / % 表示加減乘除和取

30、余運(yùn)算+= -= *= /= 同 C 語言中的含義位操作符 = 表示位左右移一位操作& &= | |= 表示按位與、位或操作 ! 表示非操作 = 表示異或操作關(guān)系運(yùn)算符 = = != 表示大于、小于、大于等于、小于等于、等于、不等于操作& | 邏輯與、邏輯或操作3.4 變量的特殊操作BASH 中還有一些對變量的簡潔、快速的操作,大家還記得 $var 和 $var 同樣是對變量的引用吧,對 $var 進(jìn)行一些變化就可以產(chǎn)生一些新功能:$var-default 表示如果變量 $var 還沒有設(shè)置,則保持 $var 沒有設(shè)置的狀態(tài),并返回后面的默認(rèn)值 default。$var=default 表示如

31、果變量 $var 還沒有設(shè)置,則取后面的默認(rèn)值 default。$var+otherwise 表示如果變量 $var 已經(jīng)設(shè)置,則返回 otherwise 的值,否則返回空( null )。$var?err_msg 表示如果變量 $var 已經(jīng)設(shè)置,則返回該變量的值,否則將后面的 err_msg 輸出到標(biāo)準(zhǔn)錯(cuò)誤輸出上。請同學(xué)們自己嘗試下面的例子:#!/bin/bashecho $var?There is an errorexit 0還有下面一些用法,這些用法主要用于從文件路徑字符串中提取有用信息:$var#pattern, $var#pattern 用于從變量 $var 中剝?nèi)プ疃蹋ㄗ铋L)的和

32、 pattern 相匹配的最左側(cè)的串。$var%pattern, $var%pattern 用于從變量 $var 中剝?nèi)プ疃蹋ㄗ铋L)的和 pattern 相匹配的最右側(cè)的串。另外BASH 2中還加入下面一些操作:$var:pos 表示去掉變量 $var 中前 pos 個(gè)字符。$var:pos:len 表示變量 $var 中去掉前 pos 個(gè)字符后的剩余字符串的前 len 個(gè)字符。$var/pattern/replacement 表示將變量 $var 中第一個(gè)出現(xiàn)的 pattern 模式替換為 replacement 字符串。$var/pattern/replacement 表示將變量 $var

33、 中出現(xiàn)的所有 pattern 模式全部都替換為 replacment 字符串。BASH 中的其他高級問題 BASH 中對返回值的處理 用 BASH 設(shè)計(jì)簡單用戶界面 在 BASH 中讀取用戶輸入 一些特殊的慣用法 BASH 程序的調(diào)試 關(guān)于 BASH24.1 BASH 中對返回值的處理無論是在 Shell 中對 BASH 腳本返回值的處理,還是在腳本中對函數(shù)返回值的處理,都是通過 $? 系統(tǒng)變量來獲得。BASH 要求返回值必須為一個(gè)整數(shù),不能用 return 語句返回字符串變量。4.2 用 BASH 設(shè)計(jì)簡單用戶界面BASH 中提供了一個(gè)小的語句格式,可以讓程序快速的設(shè)計(jì)出一個(gè)字符界面的用戶

34、交互選擇的菜單,該功能就是由語句來實(shí)現(xiàn)的,select 語句的語法為:select var indostatments use $vardone上面的語法結(jié)構(gòu)在執(zhí)行后,BASH 會將中的所有項(xiàng)加上數(shù)字列在屏幕上等待用戶選擇,在用戶作出選擇后,變量 $var 中就包含了那個(gè)被選中的字符串,然后就可以對該變量進(jìn)行需要的操作了。我們可以從下面的例子中更直觀的來理解這個(gè)功能:#!/bin/bashOPTIONS=Hello Quitselect opt in $OPTIONS; doif $opt = Quit ; thenecho doneexitelif $opt = Hello ; thenecho Hello Worldelseclearecho bad optionfidoneexit 0大家可以試著執(zhí)行上面的程序,看看是什么執(zhí)行結(jié)果。4.3 在 BASH 中讀取用戶輸入BASH 中通過 read 函數(shù)來實(shí)現(xiàn)讀取用戶輸入的功能,如下面這段程序:#!/bin/bashecho Please enter your nameread NAMEecho Hi! $NAME !exit 0上面這個(gè)腳本讀取用戶的輸入,并回顯在屏幕上。另外 BASH 中還提供另外一種稱為here documents 的結(jié)構(gòu)?,可以將用戶需要通過鍵盤輸入的字符串改為從程序體中直接讀入,如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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

提交評論