《Linux系統(tǒng)基礎(chǔ)與應(yīng)用實(shí)踐》課件第8章 shell基礎(chǔ)_第1頁(yè)
《Linux系統(tǒng)基礎(chǔ)與應(yīng)用實(shí)踐》課件第8章 shell基礎(chǔ)_第2頁(yè)
《Linux系統(tǒng)基礎(chǔ)與應(yīng)用實(shí)踐》課件第8章 shell基礎(chǔ)_第3頁(yè)
《Linux系統(tǒng)基礎(chǔ)與應(yīng)用實(shí)踐》課件第8章 shell基礎(chǔ)_第4頁(yè)
《Linux系統(tǒng)基礎(chǔ)與應(yīng)用實(shí)踐》課件第8章 shell基礎(chǔ)_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Shell基礎(chǔ)08榆林職業(yè)技術(shù)學(xué)院楊浩Linux系統(tǒng)基礎(chǔ)與應(yīng)用實(shí)踐1學(xué)習(xí)目標(biāo)1.熟練掌握vim編輯器的基本使用方法。2.熟練掌握Shell腳本程序基本編寫(xiě)規(guī)范和執(zhí)行方式。3.熟悉Linux歷史命令、命令補(bǔ)全功能、命令別名、常用快捷鍵、輸入輸出重定向、多條命令執(zhí)行、管道符、通配符與特殊符號(hào)等Bash基本功能。3.熟練掌握變量的基本概念、變量類(lèi)型、變量的聲明與變量的引用。4.熟練掌握Shell輸入輸出命令以及常用的運(yùn)算符號(hào)。5.熟悉環(huán)境變量配置文件的作用,熟練掌握配置文件的調(diào)用過(guò)程。本章學(xué)習(xí)目標(biāo)28.1vim編輯器38.1.1vim工作模式Vim工作模式命令模式用戶只能查看所編輯的文本,而不能對(duì)其進(jìn)行修改插入模式用戶可以編輯、修改文本內(nèi)容編輯模式用戶暫時(shí)離開(kāi)對(duì)正文的查看和修改,執(zhí)行其它命令按”Esc”鍵輸入命令按回車(chē)鍵,或”Esc”鍵按“:”鍵命令模式插入模式編輯模式Linux命令提示符執(zhí)行vim命令執(zhí)行wq等命令按“a”、“o”或“i”鍵vim三種模式之間相互切換的示意圖

8.1vim編輯器48.1.1vim工作模式

例8.1新建一個(gè)名為vimtest的文本文件,在文件中隨意輸入一些內(nèi)容,并插入行號(hào):

第一步:執(zhí)行如下命令,新建vimtest文件,并進(jìn)入文件的命令模式:[root@localhost~]#vimvimtest

第二步:按“a”、“o”或“i”鍵,切換到插入模式,并輸入以下文本:Hellovim!Iambigfanofyou.

第三步:按”Esc”鍵退出插入模式,然后按“:”鍵進(jìn)入編輯模式。

第四步:在編輯模式下,輸入“setnu”命令,為文本加上行號(hào),同時(shí)返回命令模式。

第五步:在命令模式下按“:”鍵,再次進(jìn)入編輯模式,輸入“wq”命令保存文本同時(shí)退出vim編輯器。這樣,vimtest文本文件就生成了,用下面的命令可以查看該文件內(nèi)容:[root@localhost~]#catvimtest-n1Hellovim!2Iambigfanofyou.8.1vim編輯器58.1.2vim基本命令1.插入命令

插入命令共有“a”、“A”、“i”、“I”、“o”和“O”六個(gè),這六個(gè)命令必須在命令模式下使用,其含義和功能見(jiàn)表8.1。2.定位命令

在編輯大文件時(shí),經(jīng)常需要在文件中加入行號(hào)并進(jìn)行快速定位,vim編輯器定位命令及功能如表8.2所示。表8.2vim定位命令的含義及功能表8.1vim插入命令的含義及功能命令含義及功能命令含義及功能a在光標(biāo)所在字符后插入I在光標(biāo)所在行首插入A在光標(biāo)所在行尾插入o在光標(biāo)所在行的下一行插入新行i在光標(biāo)所在字符前插入O在光標(biāo)所在行的上一行插入新行命令含義及功能運(yùn)行模式setnu在文件中設(shè)置行號(hào)編輯模式setnonu在文件中取消行號(hào)編輯模式gg定位到第一行命令模式GG定位到最后一行命令模式nG定位到第n行命令模式n定位到第n行編輯模式$定位到光標(biāo)所在行的行尾命令模式0定位到光標(biāo)所在行的行首命令模式8.1vim編輯器68.1.2vim基本命令3.刪除命令vim中的刪除名可以一次刪除一個(gè)字符或多個(gè)字符,也可以一次刪除一行或多行,也可以一次刪除指定范圍的行,具體刪除命令及功能如表8.3所示。4.復(fù)制、剪切和粘貼命令

vim中的復(fù)制、剪切與粘貼命令如表8.4所示。表8.4vim復(fù)制、剪切與粘貼命令的含義及功能表8.3vim刪除命令的含義及功能命令含義及功能運(yùn)行模式y(tǒng)y復(fù)制當(dāng)前行命令模式nyy復(fù)制當(dāng)前行以下的n行(包括當(dāng)前行)命令模式dd剪切當(dāng)前行命令模式ndd剪切當(dāng)前行以下的n行(包括當(dāng)前行)命令模式p粘貼到當(dāng)前行的下一行命令模式P粘貼到當(dāng)前行的上一行命令模式命令含義及功能運(yùn)行模式x刪除光標(biāo)所在處的字符命令模式nx刪除光標(biāo)所在處的后n個(gè)字符命令模式dd刪除光標(biāo)所在行命令模式ndd刪除光標(biāo)所在處后n行命令模式dG刪除光標(biāo)所在行及至文件末尾的所有內(nèi)容命令模式D刪除光標(biāo)所在處至行尾的所有內(nèi)容命令模式n1,n2d刪除n1行至n2行的所有內(nèi)容編輯模式8.1vim編輯器78.1.2vim基本命令5.替換和撤銷(xiāo)命令vim中有專(zhuān)門(mén)的替換和撤銷(xiāo)命令,其功能如表8.5所示。6.字符串查找與替換命令vim中字符串替換與查找命令及其功能如表8.6所示。表8.6vim字符串查找與替換命令的含義及功能表8.5vim替換和撤銷(xiāo)命令的含義及功能命令含義及功能運(yùn)行模式r取代光標(biāo)所在處的字符,先按“r”鍵,緊接著輸入正確字符即可命令模式R從光標(biāo)所在處開(kāi)始替換字符,直到按下”Esc”鍵結(jié)束命令模式u取消上一步的操作命令模式命令含義及功能運(yùn)行模式“/”+字符串查找指定的字符串命令模式n與第一條命令配合使用,查找指定字符串出現(xiàn)的下一個(gè)位置命令模式setic或略大小寫(xiě)編輯模式setnoic區(qū)分大小寫(xiě)編輯模式%s/old_string/new_string/g或c全文替換(命令中“g”表示在替換時(shí)不詢問(wèn),“c”表示要詢問(wèn)確認(rèn))編輯模式n1,n2s/old_string/new_string/g或c在指定范圍內(nèi)全文替換(命令中“g”表示在替換時(shí)不詢問(wèn),“c”表示要詢問(wèn)確認(rèn))編輯模式8.1vim編輯器88.1.2vim基本命令7.保存和退出命令vim中保存和退出命令及其功能如表8.7所示。8.導(dǎo)入命令執(zhí)行結(jié)果或文件內(nèi)容命令

在編輯模式下,如果某條命令有可視的執(zhí)行結(jié)果,則可以將命令的執(zhí)行結(jié)果導(dǎo)入到當(dāng)前文件光標(biāo)所在位置,其格式是:“r!命令”。

如果要導(dǎo)入文件內(nèi)容,直接執(zhí)行“r文件名”命令。

下面舉例說(shuō)明:

例8.2把當(dāng)前文件系統(tǒng)中各分區(qū)空間使用情況追加到vimtest文件中。第一步:用vim打開(kāi)vimtest文件,并把光標(biāo)移動(dòng)到文件末尾第二步:在編輯模式下,執(zhí)行“r!df-h”命令。

也就是說(shuō),在vim的編輯模式下可以通過(guò)“r!命令”的方式來(lái)執(zhí)行Linux命令。表8.7保存和退出命令的含義及功能命令含義及功能運(yùn)行模式w保存修改編輯模式wnew_filename用指定文件名另存文件編輯模式wq保存并退出編輯模式ZZ保存修改并退出的快捷鍵編輯模式q!不保存退出編輯模式wq!保存修改并退出(當(dāng)文件的所有者或root用戶對(duì)文件沒(méi)有寫(xiě)權(quán)限時(shí),可以使用該命令強(qiáng)制保存并退出)編輯模式8.2Shell與Shell腳本98.2.1Shell簡(jiǎn)介Shell是Linux/Unix的一個(gè)命令行解釋器,它為用戶提供與系統(tǒng)內(nèi)核進(jìn)行信息交互的接口,Shell把用戶輸入的命令解釋為內(nèi)核可識(shí)別的指令進(jìn)行執(zhí)行,然后把執(zhí)行結(jié)果經(jīng)Shell解釋為用戶可識(shí)別符號(hào)顯示出來(lái)。

Shell也是一個(gè)功能強(qiáng)大的編程語(yǔ)言,有自己的編程語(yǔ)法,也可以直接調(diào)用Linux/Unix系統(tǒng)命令,用戶可以利用Shell編寫(xiě)成具有特定功能的Shell腳本程序。Shell的種類(lèi)較多,目前Linux使用的基本Shell就是BourneShell下的bash(Linux支持的Shell都保存在/etc/shells文件中),本章我們以bash為例,介紹Shell腳本程序的設(shè)計(jì)方法。8.2Shell與Shell腳本108.2.2Shell腳本的執(zhí)行方式1.編寫(xiě)Shell腳本的基本規(guī)范

在編寫(xiě)Shell腳本程序時(shí)要遵循如下基本規(guī)范:Linux系統(tǒng)中,文件是不需要擴(kuò)展名的,但為了方便用戶管理和使用,我們習(xí)慣用“.sh”作為Shell腳本文件名的后綴。在程序第一行輸入“#!/bin/bash”,表示執(zhí)行該Shell腳本程序時(shí)用的解釋器是“/bin/bash”,當(dāng)然,如果是用的其它解釋器,則替換為相應(yīng)的解釋器即可。需要注意的是:這里的“#”不是注釋?zhuān)汀?!”一起用?lái)聲明該腳本程序所用的解釋器。接下來(lái)用簡(jiǎn)明的語(yǔ)言概括所編寫(xiě)程序要完成的功能、編寫(xiě)日期、作者信息等,可以根據(jù)內(nèi)容分行輸入,但必須用“#”加以注釋?zhuān)?dāng)然這些內(nèi)容不是必須的。輸入程序指令,并做必要的注釋。2.編寫(xiě)第一個(gè)Shell腳本程序

第一步:輸入如下命令,進(jìn)入vim編輯器:[root@localhostshelltest]#vimhelloLinux.sh

第二步:在打開(kāi)的HelloLinux.sh文件中輸入如下內(nèi)容,并保存退出。#!/bin/bash#HelloLinux!#author:yh#date:2018.8.10echo'helloLinux!'

這樣,就創(chuàng)建了第一Shell腳本程序文件HelloLinux.sh,該程序的解釋器是/bin/bash,程序名稱(chēng)是“HelloLinux!”,作者是yh,編寫(xiě)日期是2018.8.10,程序功能是向屏幕輸出“HelloLinux!”。8.2Shell與Shell腳本118.2.2Shell腳本的執(zhí)行方式3.Shell腳本的執(zhí)行方式Shell腳本的執(zhí)行方式有兩種,可以通過(guò)bash命令來(lái)執(zhí)行,也可以賦予用戶執(zhí)行權(quán)限,直接運(yùn)行相應(yīng)的Shell腳本。通過(guò)bash命令調(diào)用執(zhí)行,其格式是:bash腳本程序名,如:[root@localhost/]#bash/tmp/shelltest/helloLinux.shhelloLinux!賦予執(zhí)行權(quán)限,直接執(zhí)行,如:[root@localhost/]#chmod755/tmp/shelltest/helloLinux.sh[root@localhost/]#/tmp/shelltest/helloLinux.shHelloLinux!

4.DOS腳本與Unix腳本的相互轉(zhuǎn)換Windows下編寫(xiě)的Shell腳本往往不能再Linux系統(tǒng)下正常執(zhí)行,其原因之一是有些不可見(jiàn)的字符,如回車(chē)符,在Linux與Windows之間不相互兼容,在運(yùn)行腳本時(shí),往往會(huì)出現(xiàn)類(lèi)似“-bash:./helloLinux.sh:/bin/bash^Mbadinterpreter”這樣的提示信息,這時(shí)需要將DOS格式的腳本轉(zhuǎn)換為Unix格式的腳本,可以有兩種方法實(shí)現(xiàn)腳本轉(zhuǎn)換:利用dos2Unix命令,如:[root@localhostshelltest]#dos2unix./helloLinux.shdos2unix:convertingfile./helloLinux.shtoUNIXformat...#轉(zhuǎn)換成了Unix格式的腳本

當(dāng)然,也可以用unix2dos命令把Unix格式Shell腳本轉(zhuǎn)換為DOS格式的Shell腳本。在vim編輯器的編輯模式下,輸入:“setff=unix”或“setff=dos”命令,進(jìn)行格式轉(zhuǎn)換。8.3Bash基本功能128.3.1Linux歷史命令和命令補(bǔ)全Linux中,每個(gè)用戶的家目錄下都有一個(gè)隱藏文件.bash_history,該文件自動(dòng)保存用戶使用過(guò)的所有歷史命令,系統(tǒng)默認(rèn)最多保存1000條,這個(gè)值可以通過(guò)編輯環(huán)境變量配置文件/etc/profile的相關(guān)條目來(lái)修改,當(dāng)命令條數(shù)超過(guò)最大值1000時(shí),淘汰最先使用過(guò)的命令。下面介紹對(duì)歷史命令的查看、保存和利用

任何用戶都可以執(zhí)行history命令,來(lái)查看自己的歷史命令,也可以手動(dòng)將使用過(guò)的命令寫(xiě)入自己的.bash_history文件或其它文件。

1.查看、清除歷史命令history命令用來(lái)查看、清除自己的歷史命令。

命令格式:[root@localhost~]#history[選項(xiàng)][參數(shù)]

參數(shù)說(shuō)明:N表示第N條歷史命令,缺省參數(shù)表示全部命令。

選項(xiàng)說(shuō)明:c表示清除全部歷史命令。d與參數(shù)N配合使用,表示清除第N條歷史命令。缺省選項(xiàng),時(shí)用于查看歷史命令。

例8.3可用如下命令查詢歷史命令中的第10條命令:[root@localhost~]#history10

例8.4可用如下命令刪除歷史命令中的第100條命令:[root@localhost~]#history-d100

8.3Bash基本功能138.3.1Linux歷史命令和命令補(bǔ)全2.保存歷史命令history命令的另一個(gè)功能是將歷史命令保存到.bash_history或指定文件。

命令格式:[root@localhost~]#history[-a|-w][文件名]

選項(xiàng)說(shuō)明:a表示只保存相對(duì)于.bash_history文件的新增命令。w表示保存.bash_history文件中的已有命令和新增命令。Linux并不會(huì)立即把執(zhí)行過(guò)的命令保存到.bash_history文件中,可以使用該命令來(lái)把執(zhí)行過(guò)的命令保存到指定文件中,默認(rèn)保存到.bash_history文件。

3.調(diào)用歷史命令

有些命令書(shū)寫(xiě)起來(lái)較復(fù)雜,這時(shí)可以調(diào)用歷史命令。

(1)!!命令用來(lái)重復(fù)執(zhí)行前一條命令。

命令格式:[root@localhost~]#!!

(2)!String命令調(diào)用最近執(zhí)行過(guò)的以String字符串開(kāi)頭的命令。

命令格式:[root@localhost~]#!String

如要執(zhí)行最近執(zhí)行過(guò)的以“l(fā)s”字符串開(kāi)頭的命令,可執(zhí)行如下命令:[root@localhost~]#!ls

(3)!N命令用來(lái)執(zhí)行歷史命令中的第N條命令。

如要調(diào)用第100條命令,可執(zhí)行如下命令:[root@localhost~]#!100

8.3Bash基本功能148.3.1Linux歷史命令和命令補(bǔ)全4.命令和文件補(bǔ)全

在輸入命令或文件、目錄時(shí),可以利用Tab鍵的補(bǔ)全功能將命令或文件、目錄名稱(chēng)補(bǔ)充完整。

如,當(dāng)用戶輸入“his”字符串后,再按Tab鍵,這時(shí)如果以“his”開(kāi)頭的命令具有唯一性,則會(huì)把該命令補(bǔ)全,如“history”,如果以“his”開(kāi)頭的命令不唯一,則再按Tab鍵,系統(tǒng)會(huì)列出以“his”開(kāi)頭的所有命令。

Tab鍵對(duì)于文件和目錄也具有類(lèi)似的功能,使用Tab鍵的補(bǔ)全功能,可以為命令、文件的輸入提供極大方便。

命令別名,就是為長(zhǎng)命令或復(fù)雜命令定義一個(gè)較簡(jiǎn)單的名稱(chēng),通過(guò)執(zhí)行別名來(lái)達(dá)到與執(zhí)行原命令同樣的效果。1.命令別名

查看已定義的別名使用如下命令格式:[root@localhost~]#alias

定義命令別名使用如下命令格式:[root@localhost~]#alias命令別名=’原命令’

例8.5可用如下命令為命令“yum–yinstall”定義別名為“yum”:[root@localhost~]#aliasyum='yum-yinstall'

這樣,命令yumunix2dos的功能就相當(dāng)于執(zhí)行命令yum–yinstallunix2dos。如:[root@localhost~]#yumunix2dos

8.3.2命令別名和快捷鍵8.3Bash基本功能158.3.3輸入輸出重定向

刪除命令別名使用如下命令格式:[root@localhost~]#unalias別名

當(dāng)然也可以通過(guò)編輯用戶的.bashrc文件來(lái)刪除。

使用命令別名需要注意的事項(xiàng):

定義新的別名時(shí),要慎重為命令別名命名,避免新定義的別名把原來(lái)命令的功能覆蓋了。

當(dāng)有名稱(chēng)相同的命令和命令別名時(shí),優(yōu)先執(zhí)行順序如下:首先是帶路徑的命令、其次是命令別名,再次是Bash內(nèi)部命令,然后是$PATH環(huán)境變量中定義的第一個(gè)名稱(chēng)相同的命令。

通過(guò)命令行定義的命令別名只能臨時(shí)生效,要永久生效,就需要將命令別名的定義寫(xiě)入.bashrc文件。每個(gè)用戶都有一個(gè).bashrc文件,在自己的家目錄下,如:root用戶的.bashrc是/root/.bashrc

2.Bash常用的快捷鍵Bash中常用的快捷鍵及功能如表8.8所示:

轉(zhuǎn)義控制字符功能描述Ctrl+A把光標(biāo)移動(dòng)到命令行開(kāi)頭Ctrl+E把光標(biāo)移動(dòng)到命令行末尾Ctrl+C強(qiáng)制終止當(dāng)前命令Ctrl+L清屏,相當(dāng)于clear命令Ctrl+U刪除或剪切光標(biāo)之前的命令Ctrl+K刪除或剪切光標(biāo)之后的命令Ctrl+Y粘貼剪貼中的內(nèi)容Ctrl+R調(diào)出搜索界面,在歷史命令中搜索相關(guān)命令Ctrl+D退出當(dāng)前終端Ctrl+Z將當(dāng)前命令(任務(wù))放入后臺(tái)執(zhí)行Ctrl+S暫停屏幕輸出Ctrl+Q恢復(fù)屏幕輸出8.3Bash基本功能168.3.3輸入輸出重定向1.標(biāo)準(zhǔn)輸入輸出

計(jì)算機(jī)系統(tǒng)的輸入輸出設(shè)備很多,但在Linux系統(tǒng)中,我們只把鍵盤(pán)作為標(biāo)準(zhǔn)輸入設(shè)備,其設(shè)備文件名是/dev/stdin,文件描述符是0,把顯示器作為標(biāo)準(zhǔn)的輸出設(shè)備,其設(shè)備文件名是/dev/stdout,文件描述符為1,同時(shí)把顯示器也當(dāng)作標(biāo)準(zhǔn)錯(cuò)誤輸出設(shè)備,文件名是/dev/stderr,文件描述符是2。

如果我們要用到非標(biāo)準(zhǔn)輸入輸出設(shè)備時(shí),就需要使用Linux提供的輸入輸出重定向功能。2.輸出重定向

輸出重定向就是將命令的執(zhí)行結(jié)果重定向到文件或其它非標(biāo)準(zhǔn)輸出設(shè)備。輸出重定向包括標(biāo)準(zhǔn)輸出重定向和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向。

標(biāo)準(zhǔn)輸出重定向命令格式[root@localhost~]#命令[>|>>]文件

把命令的執(zhí)行結(jié)果以覆蓋(>)或追加(>>)的方式輸出到指定的文件或設(shè)備。

標(biāo)準(zhǔn)錯(cuò)誤輸出重定向命令格式[root@localhost~]#錯(cuò)誤命令[2>|2>>]文件

把命令的錯(cuò)誤執(zhí)行結(jié)果以覆蓋(2>)或追加(2>>)的方式輸出的指定到文件或設(shè)備。8.3Bash基本功能178.3.3輸入輸出重定向

例8.6可用如下命令將catls–l命令的輸出結(jié)果以覆蓋的方式輸出到redirect_test.txt文件:[root@localhosttemp]#ls-l>redirect_test.txt[root@localhosttemp]#catredirect_test.txt執(zhí)行結(jié)果:總用量4-rw-r--r--.1rootroot07月202:08c-rw-r--r--.1rootroot08月1109:44redirect_test.txtdrwxrwxr-x.2yhyh40967月209:31umask

例8.7可用如下命令將date命令的執(zhí)行結(jié)果追加到redirect_test.txt文件:[root@localhosttemp]#date>>redirect_test.txt[root@localhosttemp]#catredirect_test.txt執(zhí)行結(jié)果:總用量4-rw-r--r--.1rootroot07月202:08c-rw-r--r--.1rootroot08月1109:44redirect_test.txtdrwxrwxr-x.2yhyh40967月209:31umask2018年08月11日星期六09:46:18CST

如果命令書(shū)寫(xiě)錯(cuò)誤,系統(tǒng)會(huì)提示“找不到該命令”等信息。如:[root@localhosttemp]#data#誤將命令“date”寫(xiě)成了“data”bash:data:commandnotfound#錯(cuò)誤輸出直接輸出到標(biāo)準(zhǔn)輸出設(shè)備——顯示器

有時(shí),我們需要將錯(cuò)誤命令產(chǎn)生的提示信息寫(xiě)入到指定的文件。8.3Bash基本功能188.3.3輸入輸出重定向

例8.8可用如下命令將錯(cuò)誤的執(zhí)行結(jié)果以覆蓋的方式輸出到redirect_test.txt文件:[root@localhosttemp]#data2>redirect_test.txt#輸出到文件后,不再在屏幕顯示[root@localhosttemp]#catredirect_test.txt#錯(cuò)誤輸出覆蓋了文件中原有的內(nèi)容bash:data:commandnotfound

而在實(shí)際中,我們不一定能預(yù)測(cè)到某條命令是否能正確執(zhí)行,所以需要一種兩全其美的方法,不管命令能否正確執(zhí)行,都能將其結(jié)果保存下來(lái)。

將命令的正確執(zhí)行結(jié)果或錯(cuò)誤執(zhí)行結(jié)果都保存在同一個(gè)文件中。

命令格式:[root@localhost~]#命令[&>|&>>]文件

不管命令是否正確執(zhí)行,將其執(zhí)行結(jié)果以覆蓋(&>)或追加(&>>)的方式輸出到指定的文件或設(shè)備。

將命令的正確執(zhí)行結(jié)果和錯(cuò)誤執(zhí)行結(jié)果分別保存在不同的文件中。

命令格式:[root@localhost~]#命令[>|>>]文件1[2>|2>>]文件2

把命令的正確執(zhí)行結(jié)果以覆蓋(>)或追加(>>)的方式輸出到文件1,如果執(zhí)行錯(cuò)誤,則以覆蓋(>)或追加(>>)的方式輸出到文件2。

這種情況一般用追加的方式輸出,如果用覆蓋的方式,不管輸出到哪個(gè)文件,都同時(shí)先清空兩個(gè)文件。然后再向相應(yīng)文件輸出。8.3Bash基本功能198.3.3輸入輸出重定向

例8.9無(wú)論命令能否正確執(zhí)行,都將其執(zhí)行結(jié)果追加到redirect_test.txt:

執(zhí)行如下命令,將正確命令“l(fā)s-l”的執(zhí)行結(jié)果追加到redirect_test.txt:[root@localhosttemp]#ls-l&>>redirect_test.txt

執(zhí)行如下命令,將錯(cuò)誤命令“l(fā)sss-l”的執(zhí)行結(jié)果追加到redirect_test.txt:[root@localhosttemp]#lsss-l&>>redirect_test.txt#專(zhuān)設(shè)錯(cuò)誤命令“l(fā)sss”,以供實(shí)驗(yàn)[root@localhosttemp]#catredirect_test.txt

顯示結(jié)果為:bash:data:commandnotfound總用量8-rw-r--r--.1rootroot07月202:08c-rw-r--r--.1rootroot308月1109:50redirect_test.txtdrwxrwxr-x.2yhyh40967月209:31umaskbash:lsss:commandnotfound

結(jié)果解釋?zhuān)簉edirect_test.txt中共有6行文本,第1行是文件原有的內(nèi)容,第2~5行是正確執(zhí)行結(jié)果,第6行是錯(cuò)誤執(zhí)行結(jié)果。

例8.10可用如下命令將命令的正確執(zhí)行結(jié)果追加到redirect_test.txt1,錯(cuò)誤執(zhí)行結(jié)果追加到redirect_test.txt2文件:[root@localhosttemp]#ls-l>>redirect_test.txt12>>redirect_test.txt23.輸入重定向

輸入重定向,是指輸入不是來(lái)源于標(biāo)準(zhǔn)的輸入設(shè)備(如鍵盤(pán)),而是來(lái)源于文件或非標(biāo)準(zhǔn)輸入設(shè)備。輸入重定向在實(shí)際中用的很少,這里舉例說(shuō)明輸入重定向的簡(jiǎn)單用法。

例8.11統(tǒng)計(jì)redirect_test.txt文件中的單詞數(shù)。

下列命令將輸入重定向到了redir_test.txt,將該文件的內(nèi)容作為命令“wc–w”的輸入:[root@localhosttemp]#wc-w<redirect_test.txt39

得知,redirect_test.txt文件共有39個(gè)單詞。8.3Bash基本功能208.3.4多命令執(zhí)行與管道符1.多命令執(zhí)行Bash支持的多命令執(zhí)行,主要有如下三種情況:順序執(zhí)行所有命令。

把需要執(zhí)行的多條命用“;”號(hào)連接起來(lái),系統(tǒng)就會(huì)順序執(zhí)行各條命令,不管前面的命令能否正確執(zhí)行,所有的命令都會(huì)執(zhí)行。

例8.12下面四條命令ls-l、date、cd/user和pwd可以順序執(zhí)行:[root@localhosttemp]#ls-l;date;cd/user;pwd

結(jié)果分析:這四條命令會(huì)順序執(zhí)行,由于沒(méi)有/user目錄,所以cd/user命令不能正確執(zhí)行,但不影響其后pwd命令的執(zhí)行。順序執(zhí)行所有命令,直到錯(cuò)誤命令。

用“&&”連接的n條命令中,只有前面的命令都正確執(zhí)行了,才會(huì)執(zhí)行下一條命令,若某一條命令不能正確執(zhí)行,則其后的命令都停止執(zhí)行。

例8.13下面四條命令ls、pwd、cd/user和cat/etc/passwd執(zhí)行過(guò)程中,若某條命令不能正確執(zhí)行,則其后所有命令停止執(zhí)行。[root@localhosttemp]#ls&&pwd&&cd/user&&cat/etc/passwd

結(jié)果分析:ls命令可以正確執(zhí)行,所以pwd命令就可以執(zhí)行,同理,cd/user命令就可以執(zhí)行,但由于該命令不能正確執(zhí)行,所以其后的cat/etc/passwd命令停止執(zhí)行。8.3Bash基本功能218.3.4多命令執(zhí)行與管道符1.多命令執(zhí)行順序執(zhí)行第一條正確命令

用“||”連接的n條命令中,只有前面的命令都不能正確執(zhí)行時(shí),才會(huì)執(zhí)行下一條命令,當(dāng)某條命令正確執(zhí)行后,則其后的所有命令不管能否正確執(zhí)行,都不執(zhí)行。

例8.14下面四條命令ls–ld/user、cd/user、pwd和cat/etc/passwd順序執(zhí)行第一條正確命令:[root@localhosttemp]#ls-ld/user||cd/user||pwd||cat/etc/passwd

結(jié)果分析:第一條命令中由于不存在目錄/user,不能正確執(zhí)行,所以順序執(zhí)行第二條命令,同理,第二條命令也不能正確執(zhí)行,所以順序執(zhí)行第三條命令,由于第三條命令可以正確執(zhí)行,所以即使其后的命令可以正確執(zhí)行,也不再執(zhí)行了。

例8.15把硬盤(pán)/dev/sdb的全部數(shù)據(jù)拷貝到硬盤(pán)/dev/sda中,計(jì)算所用時(shí)間:

第一步:執(zhí)行如下命令,將/dev/sdb的全部數(shù)據(jù)拷貝到硬盤(pán)/dev/sda,并記錄開(kāi)始時(shí)間和結(jié)束時(shí)間:[root@localhosttemp]#date;ddif=/dev/sdbof=/dev/sda;date

第二步:用結(jié)束時(shí)間減去開(kāi)始時(shí)間就是所用時(shí)間(具體計(jì)算略)。

對(duì)磁盤(pán)拷貝命令做如下說(shuō)明:

命令格式:[root@localhost~]#ddif=輸入文件(來(lái)源文件)of=輸出文件(目標(biāo)文件)

bs=每個(gè)數(shù)據(jù)塊的字節(jié)數(shù)count=數(shù)據(jù)塊數(shù)

該命令主要用于磁盤(pán)之間的拷貝,當(dāng)然也可以用于文件之間的非全文拷貝。8.3Bash基本功能228.3.4多命令執(zhí)行與管道符1.多命令執(zhí)行

例8.16可用如下命令將redirect_test.txt文件中的前30個(gè)字節(jié)拷貝到redirect_test.txt2文件:[root@localhosttemp]#ddif=redirect_test.txtof=redirect_test.txt2bs=2count=15

執(zhí)行結(jié)果為:記錄了15+0的讀入記錄了15+0的寫(xiě)出30字節(jié)(30B)已復(fù)制,0.000182272秒,165kB/秒

例8.17在Shell編程中,可用如下指令判斷cd命令能否正確執(zhí)行:[root@localhostusr]#cd/usr&&echo執(zhí)行正確!||echo執(zhí)行錯(cuò)誤!執(zhí)行結(jié)果:執(zhí)行正確![root@localhostusr]#cd/user&&echo執(zhí)行正確!||echo執(zhí)行錯(cuò)誤!執(zhí)行結(jié)果:bash:cd:/user:沒(méi)有那個(gè)文件或目錄執(zhí)行錯(cuò)誤!

注意:符號(hào)“&&”與“||”的順序不能互換!

2.管道符

管道符用“|”符號(hào)來(lái)表示,管道符連接的兩條命令中,前一條命令的執(zhí)行結(jié)果作為后一條命令的操作對(duì)象,所以前一條命令必須要有正確的輸出結(jié)果。其命令格式是:[root@localhost~]#命令1|命令2|命令3…|命令n

例8.18可用如下命令分屏顯示/etc/services文件中含“/tcp”字符串的條目:[root@localhost~]#cat/etc/services|grep/tcp|more

上述命令中命令cat/etc/services的執(zhí)行結(jié)果,作為命令grep/tcp操作對(duì)象,來(lái)查找包含“/tcp”的條目,命令grep/tcp執(zhí)行結(jié)果又作為命令more的操作對(duì)象,進(jìn)行分屏顯示。8.3Bash基本功能238.3.5通配符與特殊符號(hào)1.通配符Bash支持功能強(qiáng)大的通配符,常用的通配符及其含義如表8.9所示。

下面舉例說(shuō)明通配符的用處:

例8.19可用如下命令刪除/tmp/temp目錄下的所有文件:[root@localhosttemp]#cd/tmp/temp/[root@localhosttemp]#rm-fr*#刪除當(dāng)前目錄下的所有文件,謹(jǐn)慎使用該命令!

例8.20可用如下命令顯示/tmp目錄下的所有以數(shù)字字符開(kāi)頭的文件:[root@localhosttmp]#ls-l[1-9]*表8.9通配符及其含義通配符含義?匹配任意一個(gè)字符。*匹配0個(gè)或任意多個(gè)任意字符。[]匹配中括號(hào)中的任意一個(gè)字符,如[abc]可以與a匹配,也可以與b匹配,還可以與c匹配。[起始字符-結(jié)束字符]匹配起始字符與結(jié)束字符之間的任何一個(gè)字符,如[A-Z]代表任何一個(gè)大寫(xiě)字母。[^起始字符-結(jié)束字符]取反,表示除了中括號(hào)內(nèi)的任何字符,如[^0-9]代表任意一個(gè)非數(shù)字字符.8.3Bash基本功能248.3.5通配符與特殊符號(hào)2.特殊符號(hào)Shell腳本設(shè)計(jì)常用的特殊符號(hào)如表8.10所示。

例8.20在屏幕原文輸出“Kindnessisthemostbeautifulquality”:[root@localhost~]#echo'Kindessisthemostbeautifulquality'

執(zhí)行結(jié)果:Kindessisthemostbeautifulquality

因?yàn)樵妮敵龅膬?nèi)容包含了空格符號(hào),所以必須使用引號(hào)引起來(lái),如果是單個(gè)單詞或沒(méi)有空格,則可以不使用引號(hào)。8.21先定義一個(gè)變量,同時(shí)賦初值“yh”,然后將其值輸出到屏幕:[root@localhost~]#name=yh#定義變量name,并賦予值“yh”[root@localhost~]#echo$name#輸出變量mame的值,“$”表示變量取name的值yh[root@localhost~]#echo"mynameis$name"#雙引號(hào)內(nèi)的特殊符號(hào)“$”仍然有效mynameisyh[root@localhost~]#echo'mynameis$name'#單引號(hào)內(nèi)的特殊符號(hào)全部失效mynameis$name表8.10特殊符號(hào)及其含義符號(hào)含義‘’單引號(hào),原文輸出引號(hào)內(nèi)的內(nèi)容,引號(hào)內(nèi),特殊符號(hào)的功能都失效。“”雙引號(hào),原文輸出引號(hào)內(nèi)的內(nèi)容,引號(hào)內(nèi),除“$”、“`”和“\”三個(gè)符號(hào)保留特殊符號(hào)的含義外,其它特殊符號(hào)的功能都失效。``反引號(hào),反引號(hào)內(nèi)的內(nèi)容是系統(tǒng)命令,在Bash中優(yōu)先執(zhí)行,與$()作用相同,推薦使用$()。$()與反引號(hào)作用相同,引用系統(tǒng)命令的執(zhí)行結(jié)果。如:[root@localhost~]#echo$(date)2018年08月12日星期日08:36:09CST#Shell腳本中的行注釋符號(hào)。$引用變量的值,如$ID的作用是引用變量ID的值。\轉(zhuǎn)義符,使其后的字符失去特殊含義而變成普通字符輸出。8.4Bash命令258.4.1變量的基本概念1.變量類(lèi)型Bash中,根據(jù)變量的作用不同,可以分為四種變量:用戶自定義變量:由用戶根據(jù)需要定義,用戶可以隨時(shí)修改變量的值。自定義變量的作用域是當(dāng)前Shell。環(huán)境變量:保存與系統(tǒng)運(yùn)行環(huán)境相關(guān)的數(shù)據(jù),用戶也可以自定義環(huán)境變量,也可以調(diào)整環(huán)境變量的值來(lái)實(shí)現(xiàn)相應(yīng)的功能。環(huán)境變量的作用域是當(dāng)前Shell及其子Shell,如果把環(huán)境變量寫(xiě)入相應(yīng)的配置文件,那么,它的作用域是所有Shell。位置參數(shù)變量:這種變量的作用是固定的,由系統(tǒng)定義,主要用來(lái)向腳本傳遞相關(guān)值。

預(yù)定義變量:Bash預(yù)先定義好的變量,有固定的作用,不能由用戶定義。2.父Shell與子Shell

父Shell與子Shell是相對(duì)的,如果把當(dāng)前Shell作為父Shell,則在命令行輸入相應(yīng)的Shell名稱(chēng)就能進(jìn)入對(duì)應(yīng)的子Shell,用pstree命令可以查看當(dāng)前所處的Shell。如:[root@localhost~]#csh#進(jìn)入子Shell——Csh[root@localhost~]#bash#進(jìn)入子Shell——Bash[root@localhost~]#pstree#查看所在Shell

輸出結(jié)果:├─sshd───sshd───bash───csh───bash───pstree

第一個(gè)bash是執(zhí)行命令前的Shell,即當(dāng)前Shell,執(zhí)行名csh后進(jìn)入子Shell——Csh,執(zhí)行命令bash后,進(jìn)入下一級(jí)Shell——Bash。以“csh”為參照,前一個(gè)“bash”是它的父Shell,后一個(gè)“bash”是它的子Shell。要退出當(dāng)前Shell,執(zhí)行exit命令即可,退出Shell時(shí),在當(dāng)前Shell聲明的所有變量都將被清空,除非將其寫(xiě)入配置文件。8.4Bash命令268.4.1變量的基本概念3.變量命名規(guī)則

像其它編程語(yǔ)言一樣,Bash變量的命名也要遵循相應(yīng)的規(guī)則:Bash變量名只能包含字母、數(shù)字和下劃線,但不能以數(shù)字開(kāi)頭;Bash變量的默認(rèn)類(lèi)型都是字符串類(lèi)型,如果需要進(jìn)行算術(shù)運(yùn)行,則需要設(shè)定其為數(shù)值類(lèi)型;自定義變量習(xí)慣于用小寫(xiě)字母,環(huán)境變量變量用大寫(xiě)字母。2.變量賦值

可以為定義好的變量重新賦值,變量重新賦值與變量定義的格式完全相同。如:system=Unix,就是把變量system的值重新賦值為“Unix”。變量值如果有空格,則需要使用單引號(hào)或雙引號(hào)將其括起來(lái),如:department=”Qualitymanagement”

表示變量department的值是“Qualitymanagement”。

也可以把一個(gè)變量的值賦予另一個(gè)變量,或把某條命令的執(zhí)行結(jié)果賦值給變量。3.變量引用

由前述所知,引用變量的值,要在變量名前加“$”,引用命令的執(zhí)行結(jié)果要使用“$(命令名)”格式。如:system1=$system,表示把變量system的值賦值給了變量system1;result=$(date),表示把命令date的執(zhí)行結(jié)果賦值給了變量result。8.4.2用戶自定義變量1.聲明自定義變量

變量首次被賦值的同時(shí),被聲明,其格式是:變量名=變量值變量名與變量值用“=”鏈接,“=”兩側(cè)不能有空格。

如:system=Linux,就是定義一個(gè)名為system的變量,并設(shè)置變量的初始值為“Linux”,這樣,變量system就定義好了。8.4Bash命令278.4.2用戶自定義變量4.連接字符串

連接兩個(gè)字符串變量的格式為:$變量1$變量2

鏈接字符串變量與字符串常量的格式為:“$變量”常量或常量“$變量”或

${變量}常量或常量${變量}5.查看變量[root@localhost~]#set

查看系統(tǒng)中保存的所有變量6.刪除變量[root@localhost~]#unset變量名

刪除指定變量1.聲明環(huán)境變量

用戶自己可以聲明環(huán)境變量,格式為:export變量名=變量值

其中,export是聲明環(huán)境變量的關(guān)鍵字。

如:exportBIRTHDAY=2018年8月14日,

聲明BIRTHDAY是環(huán)境變量,其初始值是2018年8月14日。

聲明環(huán)境變量也可以先給變量賦值,然后將其聲明為環(huán)境變量。如:[root@localhost~]#AGE=18[root@localhost~]#exportAGE

這樣,環(huán)境變量BIRTHDAY和AGE,不僅在當(dāng)前Shell中生效,而且還在其子Shell中生效,但不能在父Shell中生效。為了使環(huán)境變量能在所有Shell中長(zhǎng)期生效,可以把環(huán)境變量的聲明寫(xiě)入用戶的配置文件中,如root的配置文件是/root/.bashrc,然后重啟系統(tǒng)即可。8.4.3環(huán)境變量8.4Bash命令288.4.3環(huán)境變量2.查看和刪除環(huán)境變量

set命令可以查看所有變量,env命令專(zhuān)門(mén)用于查看系統(tǒng)變量。刪除系統(tǒng)變量的方法類(lèi)似于刪除用戶自定義變量,可使用unset命令,如刪除AGE系統(tǒng)變量,可以使用如下命令:[root@localhost~]#unsetAGE

環(huán)境變量的賦值、引用與自定義變量相同,這里不再贅述。3.常用的系統(tǒng)自定義環(huán)境變量

用env命令可以查看到系統(tǒng)全部的環(huán)境變量,下面介紹幾個(gè)常用的環(huán)境變量。系統(tǒng)查找命令的路徑:PATH環(huán)境變量

系統(tǒng)在執(zhí)行命令時(shí),并不需要我們輸入命令所在的路徑,而是直接在命令行輸入命令本身即可。原因就是所有命令的路徑都保存在PATH環(huán)境變量中。PATH環(huán)境變量的值是用“:”分割的一串路徑,系統(tǒng)執(zhí)行命令時(shí),搜索PATH環(huán)境變量保存的路徑從而找到命令所對(duì)應(yīng)的命令文件。

執(zhí)行如下命令,可以查看PATH環(huán)境變量的值:[root@localhost~]#echo$PATH執(zhí)行結(jié)果:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binls命令的絕對(duì)路徑是/bin/ls,當(dāng)我們?cè)诿钚休斎雔s,按回車(chē)鍵后,系統(tǒng)就在PATH環(huán)境變量中搜索ls命令文件所在的路徑/bin,并在/bin目錄下找到ls命令文件才開(kāi)始執(zhí)行,所以執(zhí)行l(wèi)s命令與執(zhí)行/bin/ls命令是等效的。如果PATH中刪除命令ls的路徑/bin,則必須在命令行中輸入/bin/ls才能正確執(zhí)行l(wèi)s命令。/home/remounttest.sh是用戶自己編寫(xiě)Shell腳本文件,要想在任何目錄提示符下輸入文件名remounttest.sh就能執(zhí)行該腳本,必須把它的目錄/home添加到PATH環(huán)境變量中:[root@localhosthome]#PATH="$PATH":/home#把/home加入PATH變量,用“:”分割8.4Bash命令298.4.3環(huán)境變量2.查看和刪除環(huán)境變量[root@localhosthome]#echo$PATH/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home

#/home目錄已加入到PATH變量[root@localhosthome]#cd/root[root@localhost~]#remounttext.sh#可以直接輸入文件名執(zhí)行程序Linuxisagreatoperatingsystem!

但是,這種方式也是臨時(shí)生效,要永久生效,需要將命令"$PATH":/home寫(xiě)入/etc/profile配置文件。定義系統(tǒng)提示符:PS1環(huán)境變量

環(huán)境變量PS1,定義了系統(tǒng)命令行提示符的格式,執(zhí)行如下命令,查看當(dāng)前提示符格式:[root@localhost~]#echo$PS1[\u@\h\W]\$

說(shuō)明系統(tǒng)當(dāng)前提示符格式是“[\u@\h\W]\$”8.4Bash命令308.4.3環(huán)境變量

那么各參數(shù)代表什么含義呢?環(huán)境變量PS1中各參數(shù)的含義見(jiàn)表8.11。

所以系統(tǒng)當(dāng)前提示符格式是“[用戶名@主機(jī)名最后一個(gè)目錄](méi)提示符”。

例8.22可用如下命令定義命令提示符的格式為“[用戶名@12小時(shí)制時(shí)間絕對(duì)路徑]提示符”:oot@localhost~]#PS1='[\u@\t\w]\$'[root@03:38:32~]#cd/tmp/temp[root@03:38:53/tmp/temp]#

同樣,上述修改也只是臨時(shí)生效,要長(zhǎng)期生效,需要把修改寫(xiě)入相應(yīng)的配置文件,不過(guò)我們習(xí)慣使用系統(tǒng)默認(rèn)的提示符格式。參數(shù)名稱(chēng)含義\d顯示日期,格式為:星期月日\(chéng)h顯示主機(jī)名,默認(rèn)主機(jī)名是locatehost\t以24小時(shí)制顯示時(shí)間,格式為HH:MM:SS\T以12小時(shí)制顯示時(shí)間,格式為HH:MM:SS\A以24小時(shí)制顯示時(shí)間,格式為HH:MM\u顯示當(dāng)前用戶\w顯示當(dāng)前絕對(duì)目錄\W顯示當(dāng)前絕對(duì)目錄的最后一個(gè)目錄\#執(zhí)行的第幾條命令\$命令提示符,root用戶的提示符為“#”,普通用戶的提示符為“$”8.4Bash命令318.4.4位置參數(shù)變量

系統(tǒng)中的位置參數(shù)變量及其作用都是固定的,用戶不能自己定義位置參數(shù)變量,只能借助位置參數(shù)變量進(jìn)行參數(shù)傳遞。位置參數(shù)變量及其作用如下表所示。

例8.23編寫(xiě)一個(gè)加法計(jì)算器,求任意兩個(gè)數(shù)的和。

第一步:新建一個(gè)Shell腳本文件calculator.sh,將以下內(nèi)容寫(xiě)入腳本,并保存:#!/bin/bash#求和計(jì)算器#作者:yhecho"程序文件名為:"$0sum=$(($1+$2))echo"sum="$sum

第二步:#運(yùn)行程序,并把100和200兩個(gè)數(shù)傳遞給位置參數(shù)變量$1和$2:[root@localhosttemp]#./calculator.sh100200

運(yùn)行結(jié)果:

程序文件名為:./calculator.sh

sum=300

本例說(shuō)明:系統(tǒng)把命令行的程序文件名“./calculator.sh”傳遞給了位置參數(shù)變量$0,把“100”和“200”兩個(gè)參數(shù)分別傳遞給了位置參數(shù)變量$1和$2。位置參數(shù)變量含義$nn為非負(fù)整數(shù),其中$0表示當(dāng)前運(yùn)行的程序本身,$n表示第n個(gè)參數(shù)(1<=n<10),當(dāng)n>=10時(shí),要用大括號(hào)括起來(lái),如${10}。$*表示命令行中的所有參數(shù),它把所有的參數(shù)作為一個(gè)整體。$@表示命令行中的所有參數(shù),不過(guò)它區(qū)別對(duì)待各個(gè)參數(shù)$#表示命令行中所有參數(shù)的個(gè)數(shù)8.4Bash命令328.4.4位置參數(shù)變量

例8.24編寫(xiě)一個(gè)Shell腳本,輸出用戶終端輸入的參數(shù)個(gè)數(shù),并分別打印$*和$@的值。

第一步:新建一個(gè)Shell腳本文件paratest.sh,將以下內(nèi)容寫(xiě)入腳本,并保存:#!/bin/bashecho"參數(shù)個(gè)數(shù)為:"$#foriin"$*"doecho'位置參數(shù)變量$*的值為:'$idonex=1forjin"$@"doecho'位置參數(shù)變量$@的第'$x'個(gè)參數(shù)的值為:'$jx=$(($x+1))done

第二步:執(zhí)行程序并設(shè)置參數(shù)[root@localhosttemp]#./paratest.shyouIhe

運(yùn)行結(jié)果為:參數(shù)個(gè)數(shù)為:3位置參數(shù)變量$*的值為:youIhe位置參數(shù)變量$@的第1個(gè)參數(shù)的值為:you位置參數(shù)變量$@的第2個(gè)參數(shù)的值為:I位置參數(shù)變量$@的第3個(gè)參數(shù)的值為:he

由此可知,位置參數(shù)變量$#的值是用戶輸入的參數(shù)個(gè)數(shù),位置參數(shù)變量$*和$@的值都是用戶輸入的參數(shù),但是$*把用戶輸入的所有參數(shù)作為一個(gè)整體,而$@把用戶輸入的所有參數(shù)分別對(duì)待。8.4Bash命令338.4.5預(yù)定義變量

Bash中,主要有$?、$$和$!三個(gè)預(yù)定義變量,預(yù)定義變量的作用類(lèi)似于位置參數(shù)變量,其含義如下表所示。位置參數(shù)變量含義$?其值是上一條命令的執(zhí)行狀態(tài)。如果上一條命令執(zhí)行正確,其值為0,如果執(zhí)行錯(cuò)誤,則結(jié)果為非零數(shù)字。$$其值為當(dāng)前進(jìn)程的ID號(hào)(PID)。$!其值為后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的ID號(hào),如果沒(méi)有后臺(tái)進(jìn)程,則返回空。8.5輸入輸出命令348.5.1鍵盤(pán)輸入命令

read命令是bash內(nèi)部命令,其作用是接收鍵盤(pán)輸入到指定的變量。

命令格式:[root@localhost~]#read[選項(xiàng)][變量名]

選項(xiàng)說(shuō)明:p“提示信息”,用戶定義的輸入提示信息。t指定等待用戶輸入的時(shí)間,單位是秒,如果在指定時(shí)間內(nèi)沒(méi)有輸

入,則跳到下一步,默認(rèn)為一直等待。n定義允許輸入的最大字符個(gè)數(shù)。s隱藏輸入的數(shù)據(jù),如密碼等機(jī)密數(shù)據(jù)的輸入需要隱藏。

例8.25編寫(xiě)一個(gè)Shell腳本,求位數(shù)不大于2的兩個(gè)數(shù)的和。

第一步:新建一個(gè)Shell腳本程序,輸入如下內(nèi)容并保存退出。#!/bin/bash#求兩個(gè)數(shù)的和:read-p"請(qǐng)輸入第一個(gè)加數(shù)(兩位數(shù),5秒內(nèi)):"-t5-n2num1echo–e“\n”read-p"請(qǐng)輸入第二個(gè)加數(shù)(兩位數(shù),5秒內(nèi)):"-t5-n2num2echo–e“\n”sum=$(($num1+$num2))echo"兩個(gè)數(shù)的和為:"$sum

第二步:賦予權(quán)限,執(zhí)行程序,驗(yàn)證程序的正確性。[root@localhosttemp]#chmod755calculator_friendly.sh[root@localhosttemp]#./calculator_friendly.sh請(qǐng)輸入第一個(gè)加數(shù)(兩位數(shù),5秒內(nèi)):23請(qǐng)輸入第二個(gè)加數(shù)(兩位數(shù),5秒內(nèi)):54兩個(gè)數(shù)的和為:778.5輸入輸出命令358.5.2輸出命令echoecho命令所在目錄是/bin,所有用戶都可以執(zhí)行,其功能是向屏幕輸出文本。

命令格式:[root@localhost~]#echo[選項(xiàng)]輸出文本

該命令的常用選項(xiàng)是e,它支持轉(zhuǎn)義控制字符,控制文本輸出格式。使用該選項(xiàng)時(shí),其后的輸出文本要用雙引號(hào)或單引號(hào)。該選項(xiàng)所支持的轉(zhuǎn)義控制字符及其功能如右表所示

例8.26可用如下命令順序輸出a~j十個(gè)字母,每行五個(gè),字母之間用制表符分割:[root@localhost~]#echo-e"\ta\tb\tc\td\te\n\tf\tg\th\ti\tj"

輸出結(jié)果:abcdefghij轉(zhuǎn)義控制字符功能描述\\輸出“\”\a輸出警告音\b輸出退格鍵,即向左刪除一個(gè)字符\c取消輸出行末尾的換行符\e輸出ESCAPE鍵\f換頁(yè)符\n換行符\r回車(chē)鍵\t輸出水平制表符\v輸出垂直制表符\0nnn按照八進(jìn)制ASCll碼表輸出字符。其中的“nnn”為三位八進(jìn)制數(shù)\xhh按照十六進(jìn)制ASCII碼表輸出字符,其中的“hh”為兩位十六進(jìn)制數(shù)8.6運(yùn)算符368.6.1聲明和取消變量類(lèi)型

未特別聲明變量類(lèi)型的情況下,變量的默認(rèn)類(lèi)型是字符串類(lèi)型。如:[root@localhosttemp]#num1=5[root@localhosttemp]#num2=4[root@localhosttemp]#str=$num1+$num2#變量str的默認(rèn)類(lèi)型是字符串類(lèi)型,所以等于號(hào)右側(cè)執(zhí)行字符串連接操作[root@localhosttemp]#echo$str5+4

另外,declare命令在聲明變量的同時(shí),可以為變量賦值。

例8.26可用如下命令聲明一個(gè)整型環(huán)境變量var,同時(shí)賦初值22:[root@localhosttemp]#declare-i-xvar=22#聲明變量[root@localhosttemp]#declare-pvar#查看變量類(lèi)型和值執(zhí)行結(jié)果:declare-ixvar="22"#變量var的類(lèi)型為整型環(huán)境變量(-ix),其值為22

declare命令是Bash內(nèi)部命令,其作用是聲明或取消環(huán)境變量類(lèi)型,也可以查看變量的類(lèi)型和值。若不帶任何選項(xiàng)和參數(shù)時(shí),顯示所有Shell變量及它們的值,此時(shí),相當(dāng)于不帶參數(shù)選項(xiàng)的命令set和typeset的作用。

命令格式:[root@localhost~]#declare[-i|+i|+x|-x|-r|-p][變量名]

選項(xiàng)說(shuō)明:-i或+i聲明指定變量的類(lèi)型為整型變量,或取消指定變量的整型類(lèi)型。-x或+x聲明指定變量的類(lèi)型為環(huán)境變量,或取消指定變量的環(huán)境類(lèi)型屬性。該選項(xiàng)在聲明變量類(lèi)型時(shí),作用相對(duì)于export命令聲明的環(huán)境變量。-r聲明指定變量為只讀變量,變量的只讀屬性不能被取消,也不能刪除該變量。-p查看指定變量的類(lèi)型和值,不帶變量名時(shí),顯示所有變量的類(lèi)型和值。8.6運(yùn)算符378.6.2算術(shù)運(yùn)算方法2.使用expr命令進(jìn)行算術(shù)運(yùn)算expr命令可以進(jìn)行算術(shù)運(yùn)算也可以進(jìn)行字符串運(yùn)算,若操作數(shù)與操作符之間有空格符分割,則執(zhí)行算術(shù)運(yùn)算,若無(wú)空格分割,則執(zhí)行字符串連接操作,此時(shí)將操作符當(dāng)作字符串常量。如:[root@localhosttemp]#expr$num1+$num2#無(wú)空格符分割執(zhí)行結(jié)果:5+4[root@localhosttemp]#expr$num1+$num2#有空格分割

執(zhí)行結(jié)果:9用expr命令計(jì)算例8.27的方法如下:[root@localhosttemp]#sum=$(expr$num1+$num2)#將命令expr的執(zhí)行結(jié)果賦值給sum[root@localhosttemp]#echo$sum91.用declare將存儲(chǔ)算術(shù)運(yùn)算結(jié)果的變量聲明為整型變量,然后進(jìn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論