Linux自動(dòng)化運(yùn)維(Shell與Ansible)全套教學(xué)課件_第1頁(yè)
Linux自動(dòng)化運(yùn)維(Shell與Ansible)全套教學(xué)課件_第2頁(yè)
Linux自動(dòng)化運(yùn)維(Shell與Ansible)全套教學(xué)課件_第3頁(yè)
Linux自動(dòng)化運(yùn)維(Shell與Ansible)全套教學(xué)課件_第4頁(yè)
Linux自動(dòng)化運(yùn)維(Shell與Ansible)全套教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩735頁(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)介

Linux自動(dòng)化運(yùn)維項(xiàng)目1:初識(shí)Shell腳本全套可編輯PPT課件

學(xué)習(xí)目標(biāo)【知識(shí)目標(biāo)】了解LinuxShell基本概念、主要版本及用途。了解輸入輸出重定向和管道符基本概念。了解數(shù)據(jù)輸入輸出、運(yùn)算符、轉(zhuǎn)義符基本概念。了解Shell變量的定義與調(diào)用基本概念?!炯寄苣繕?biāo)】掌握輸入輸出重定向和管道符的使用方法。掌握數(shù)據(jù)輸入輸出、算術(shù)運(yùn)算符、轉(zhuǎn)義符的使用方法。掌握Shell變量的定義與調(diào)用?!舅刭|(zhì)目標(biāo)】培養(yǎng)讀者的團(tuán)隊(duì)合作精神、協(xié)同創(chuàng)新能力,使其能夠在團(tuán)隊(duì)中積極合作、有效溝通。培養(yǎng)讀者的信息素養(yǎng)和學(xué)習(xí)能力,使其能夠靈活運(yùn)用正確的學(xué)習(xí)方法和技巧,快速掌握新知識(shí)和技能,并不斷學(xué)習(xí)和進(jìn)步。培養(yǎng)讀者嚴(yán)謹(jǐn)?shù)倪壿嬎季S能力,使其能夠正確地處理自動(dòng)化管理中的問(wèn)題。同時(shí),注重培養(yǎng)讀者在開源技術(shù)方面的國(guó)產(chǎn)自主意識(shí),熟悉相關(guān)的開源協(xié)議。初識(shí)Shell腳本任務(wù)1:LinuxShell簡(jiǎn)介目錄/Contents01020304Linux操作系統(tǒng)Linux內(nèi)核Linux發(fā)行版Shell簡(jiǎn)介05Shell版本01Linux操作系統(tǒng)Linux操作系統(tǒng)操作系統(tǒng)(OperatingSystem,OS)是一組主管并控制計(jì)算機(jī)操作、運(yùn)用和運(yùn)行硬件、軟件資源和提供公共服務(wù)來(lái)組織用戶交互的相互關(guān)聯(lián)的系統(tǒng)軟件程序,同時(shí)也是計(jì)算機(jī)系統(tǒng)的核心與基石。操作系統(tǒng)需要處理管理與配置內(nèi)存、決定系統(tǒng)資源供需的優(yōu)先次序、控制輸入與輸出裝置、操作網(wǎng)絡(luò)與管理文件系統(tǒng)等基本事務(wù),讓應(yīng)用程序可以與硬件交互,常見的操作系統(tǒng)有:Linux、Windows、MacOS、安卓、蘋果ios等。Linux操作系統(tǒng)通常情況下,企業(yè)使用的Linux指的是操作系統(tǒng)。Linux操作系統(tǒng)是一種開源的、支持多用戶和多任務(wù)的操作系統(tǒng),它的內(nèi)核由芬蘭人林納斯·托瓦爾茲在1991年發(fā)布,現(xiàn)在由Linux基金會(huì)維護(hù)和管理。Linux操作系統(tǒng)是由多個(gè)部分組成的,主要有以下幾部分:內(nèi)核Linux操作系統(tǒng)的主要組件,也是計(jì)算機(jī)硬件與其進(jìn)程之間的核心接口,負(fù)責(zé)兩者之間的通信,以及盡可能高效地管理資源

系統(tǒng)庫(kù)是操作系統(tǒng)提供的一組可供程序調(diào)用的函數(shù)庫(kù)。它可以幫助程序與內(nèi)核進(jìn)行交互,以獲取系統(tǒng)資源或完成其他操作

用戶空間程序是指運(yùn)行在用戶模式下的程序,它們不能直接訪問(wèn)內(nèi)核,而是通過(guò)系統(tǒng)庫(kù)與內(nèi)核進(jìn)行交互

圖形用戶界面是指用圖像的方式向用戶呈現(xiàn)操作系統(tǒng)的界面,使用戶能夠通過(guò)圖形化的方式與系統(tǒng)進(jìn)行交互

為用戶提供特定功能的程序。Linux操作系統(tǒng)提供了大量的應(yīng)用程序,用戶可以根據(jù)需要安裝和使用這些應(yīng)用程序

內(nèi)核系統(tǒng)庫(kù)應(yīng)用程序圖形用戶界面用戶空間程序Linux操作系統(tǒng)Linux操作系統(tǒng)是由多個(gè)部分組成的,主要有以下幾部分文件系統(tǒng)是指操作系統(tǒng)用于存儲(chǔ)文件和數(shù)據(jù)結(jié)構(gòu)的地方。它提供文件的存儲(chǔ)、管理和訪問(wèn)功能。安裝程序是指用于安裝Linux系統(tǒng)的程序,它可以幫助用戶將Linux系統(tǒng)安裝到硬盤或其他存儲(chǔ)設(shè)備上。啟動(dòng)程序是指用于啟動(dòng)Linux操作系統(tǒng)的程序,它負(fù)責(zé)加載內(nèi)核并啟動(dòng)操作系統(tǒng)。配置文件是指用于配置操作系統(tǒng)和程序的文件,它可以幫助用戶調(diào)整系統(tǒng)的行為和參數(shù)。文件系統(tǒng)安裝程序配置文件啟動(dòng)程序Linux操作系統(tǒng)02Linux內(nèi)核Linux內(nèi)核術(shù)語(yǔ)“操作系統(tǒng)”通常包含兩種不同的含義指完整的軟件包,在更狹義的范圍內(nèi),指管理和分配計(jì)算機(jī)資源(即CPU、內(nèi)存和設(shè)備)的核心層軟件。術(shù)語(yǔ)“內(nèi)核”通常是指狹義范圍的含義。雖然在沒有內(nèi)核的情況下,計(jì)算機(jī)也能運(yùn)行程序,但有了內(nèi)核會(huì)極大簡(jiǎn)化其他程序的編寫和使用,讓工程師游刃有余地管理系統(tǒng)。之所以稱為內(nèi)核,是因?yàn)樵诓僮飨到y(tǒng)中它就像果實(shí)的種子一樣,控制著硬件(無(wú)論是移動(dòng)終端、筆記本電腦、服務(wù)器,還是任何其他類型的計(jì)算機(jī))的所有主要功能。01Linux內(nèi)核目前由Linux基金會(huì)負(fù)責(zé)管理和維護(hù)。Linux基金會(huì)是一個(gè)非營(yíng)利性的組織,致力于為開源技術(shù)和社區(qū)發(fā)展做出貢獻(xiàn)。它旨在促進(jìn)Linux內(nèi)核和相關(guān)技術(shù)的發(fā)展,并為開源社區(qū)提供支持和資源。02Linux內(nèi)核的維護(hù)主要由內(nèi)核開發(fā)者和社區(qū)維護(hù)者完成。Linux內(nèi)核的發(fā)布頻率通常是每隔幾個(gè)月發(fā)布一次。每次發(fā)布的版本都有一個(gè)版本號(hào),如6.1.4。每個(gè)版本號(hào)由3個(gè)數(shù)字組成,分別表示主版本號(hào)、次版本號(hào)和修訂號(hào)。03Linux內(nèi)核的維護(hù)工作包括代碼審核、測(cè)試、合并、發(fā)布等步驟。Linux內(nèi)核的代碼托管在Git倉(cāng)庫(kù)中,經(jīng)過(guò)嚴(yán)格的審核和測(cè)試后,才能合并到主線版本中。Linux內(nèi)核03Linux發(fā)行版Debian是一款基于Linux的開源操作系統(tǒng),由志愿者組成的社區(qū)發(fā)布和維護(hù)。Debian適用于個(gè)人計(jì)算機(jī)、服務(wù)器、嵌入式設(shè)備等平臺(tái)。Debian的特點(diǎn)在于穩(wěn)定性和自由性,它提供了豐富的軟件源,用戶可使用包管理器apt進(jìn)行軟件的安裝、升級(jí)和卸載。DebianUbuntu是一款基于Linux的開源操作系統(tǒng),由科能軟件有限公司公司維護(hù)和發(fā)布。Ubuntu適用于個(gè)人計(jì)算機(jī)、服務(wù)器、移動(dòng)設(shè)備等平臺(tái)。其主要特點(diǎn)在于易用性和社區(qū)化,它提供了豐富的軟件源和包管理器,并提供了豐富的圖形化安裝和管理工具。UbuntuLinux發(fā)行版RHEL是由紅帽公司開發(fā)的商業(yè)市場(chǎng)導(dǎo)向的Linux發(fā)行版,提供長(zhǎng)達(dá)10年的支持服務(wù),用戶可以按照自己的計(jì)劃進(jìn)行升級(jí)并在需要時(shí)采用新的功能。RHELCentOSStream是一款滾動(dòng)發(fā)布的操作系統(tǒng)。它提供持續(xù)內(nèi)容流,不斷地收集最新的軟件包,并在經(jīng)過(guò)測(cè)試后發(fā)布。在發(fā)布新的RHEL版本之前,紅帽公司會(huì)在CentOSStream中開發(fā)RHEL源碼,RHEL9是在CentOSStream中構(gòu)建的第一個(gè)主要版本。CentOSStreamLinux發(fā)行版提供了一個(gè)強(qiáng)大的、可擴(kuò)展的操作系統(tǒng)平臺(tái),并且注重用戶體驗(yàn),具有簡(jiǎn)單易用的圖形用戶界面和豐富的軟件源。Fedora還注重自由和開源軟件,并且是一個(gè)流行的服務(wù)器和桌面操作系統(tǒng)。Fedora歐拉是一個(gè)開源的Linux發(fā)行版,由華為公司開發(fā)和維護(hù)。它的軟件包管理方式和RHEL、CentOSStream一致,但它提供了更多的應(yīng)用和工具,并經(jīng)過(guò)了深度優(yōu)化,用于企業(yè)級(jí)服務(wù)器、工作站、虛擬化和云環(huán)境。openEuler04Shell簡(jiǎn)介Shell簡(jiǎn)介Shell是一種具有特殊用途的程序,主要用于讀取用戶輸入的命令,并執(zhí)行相應(yīng)的程序以響應(yīng)命令。Shell也被稱為命令解釋器,用戶可以通過(guò)輸入命令來(lái)控制操作系統(tǒng)和運(yùn)行程序。術(shù)語(yǔ)“登錄Shell”是指用戶登錄系統(tǒng)時(shí),由系統(tǒng)創(chuàng)建用以運(yùn)行Shell的進(jìn)程。盡管某些操作系統(tǒng)將命令解釋器集成于內(nèi)核中,但對(duì)Linux操作系統(tǒng)而言,Shell只是一個(gè)用戶進(jìn)程。Shell簡(jiǎn)介設(shè)計(jì)Shell的目的不僅是用于人機(jī)交互,對(duì)Shell腳本(包含Shell命令的文本文件)進(jìn)行解釋也是其目的之一。為實(shí)現(xiàn)這一目的,每款Shell都內(nèi)置有許多通常與編程語(yǔ)言相關(guān)的功能,其中包括變量、循環(huán)和條件語(yǔ)句、輸入輸出命令以及函數(shù)等。無(wú)論是專有系統(tǒng)還是開源系統(tǒng),許多操作系統(tǒng)上都可以使用命令行。LinuxShell提供一種CLI,用戶可以通過(guò)輸入命令來(lái)控制操作系統(tǒng)。提供用戶界面01LinuxShell可以執(zhí)行各種內(nèi)置命令和外置命令,完成各種操作。執(zhí)行命令02LinuxShell可以執(zhí)行Shell腳本,實(shí)現(xiàn)自動(dòng)化運(yùn)維、系統(tǒng)管理和程序開發(fā)等功能。執(zhí)行腳本03LinuxShell可以重定向輸入輸出,將命令的輸入或輸出重定向到文件或其他命令。輸入輸出重定向04LinuxShell支持環(huán)境變量,環(huán)境變量可以用來(lái)存儲(chǔ)用戶自定義的信息,例如路徑、變量值等。支持環(huán)境變量05LinuxShell的主要功能如下:Shell簡(jiǎn)介05Shell版本Shell版本Linux操作系統(tǒng)中有許多不同版本的Shell,包括BourneShell、CShell、KornShell、Bash等。Bash是常用的Shell,廣泛用于各種Linux操作系統(tǒng)。它由BillJoy(比爾·喬伊)在1978年開發(fā),是一種對(duì)sh的改進(jìn)版本,提供了更豐富的功能和更方便的語(yǔ)法。csh具有C語(yǔ)言風(fēng)格的語(yǔ)法,并且與sh不兼容。CShellBash是GNU項(xiàng)目對(duì)sh的重新實(shí)現(xiàn),BrianFox(布賴恩·??怂梗┖虲hetRamey(切特·雷米)是Bash的主要作者。Bash是許多UNIX和Linux操作系統(tǒng)的默認(rèn)Shell。Bash它由貝爾實(shí)驗(yàn)室的DavidKorn(戴維·科恩)在1983年開發(fā),是一種對(duì)sh的改進(jìn)版本,在保持與sh兼容的同時(shí),提供了更豐富的功能和更方便的語(yǔ)法。KornShell它由SteveBourne(史蒂夫·伯恩)在1977年開發(fā),是UNIX操作系統(tǒng)的標(biāo)準(zhǔn)Shell之一。sh提供一組命令用于執(zhí)行系統(tǒng)任務(wù)、編寫腳本等。sh是Linux操作系統(tǒng)中最基礎(chǔ)的命令解釋器之一。BourneShell謝謝初識(shí)Shell腳本任務(wù)2:創(chuàng)建和執(zhí)行Shell腳本

目錄/Contents010203Shell腳本基本格式Shell注釋執(zhí)行Shell腳本01Shell腳本基本格式Shell腳本基本格式在計(jì)算機(jī)領(lǐng)域中,Shebang或hashbang(#!代碼的英文發(fā)音)是一個(gè)由井號(hào)和嘆號(hào)構(gòu)成的字符序列#!,其出現(xiàn)在文本文件第一行的前兩個(gè)字符位置,它用于告訴操作系統(tǒng)使用哪個(gè)解釋器。文件中存在Shebang的情況下,類UNIX和Linux操作系統(tǒng)的程序載入器會(huì)分析Shebang后的內(nèi)容,將這些內(nèi)容作為解釋器指令,調(diào)用該指令,并將載有Shebang的文件路徑作為該解釋器的參數(shù)。Shebang是一項(xiàng)操作系統(tǒng)特性,可用于任何解釋型語(yǔ)言,如Shell、Python、Perl等。在Shell腳本中,#!/bin/bash這一行指定了腳本的解釋器為/bin/bash,腳本文件在執(zhí)行時(shí)會(huì)實(shí)際調(diào)用/bin/bash程序,這行內(nèi)容也是Shell腳本的標(biāo)準(zhǔn)起始行。01LinuxShell腳本是一種在Linux操作系統(tǒng)中用Shell編寫和運(yùn)行的程序。Shell腳本由一系列Shell命令和語(yǔ)句組成,可以完成各種復(fù)雜的操作。例如,可以編寫Shell腳本來(lái)自動(dòng)備份文件、安裝軟件、批量執(zhí)行命令等。02Shell腳本基本格式Shell腳本可以用來(lái)自動(dòng)執(zhí)行任務(wù)、執(zhí)行重復(fù)性操作、管理系統(tǒng)或應(yīng)用程序等。Shell命令是指Shell支持的各種命令,如cd、ls、echo等。學(xué)習(xí)Shell編程時(shí),需要了解這些命令的用法和參數(shù),以便使用它們來(lái)控制操作系統(tǒng)和運(yùn)行程序。在Shell中,有兩種類型的命令:內(nèi)置命令和外置命令。Shell腳本基本格式通常,內(nèi)置命令的執(zhí)行效率比外置命令高,因?yàn)樗鼈儾恍枰{(diào)用外部程序。但是,外置命令提供了更多的功能和更多的選項(xiàng),也更常用。在Linux操作系統(tǒng)中,type命令用于查詢命令的類型,可以顯示指定命令是內(nèi)置命令還是外置命令,或者是別名、關(guān)鍵字等信息。例如,可以使用type命令來(lái)查看一個(gè)命令是內(nèi)置命令還是外置命令。[opencloud@server~]$typecd

cdisashellbuiltin

[opencloud@server~]$typels

lsis/bin/ls

Shell腳本基本格式Shell語(yǔ)法是指Shell編程語(yǔ)言的語(yǔ)法規(guī)則,包括變量、流程控制、函數(shù)等方面的語(yǔ)法。學(xué)習(xí)Shell編程需要掌握Shell語(yǔ)法,這樣才能編寫有效的Shell腳本。編寫Shell腳本有許多方法,常見的方法就是使用文本編輯器。Linux操作系統(tǒng)中通常使用vi、vim文本編輯器。在文本編輯器中輸入腳本內(nèi)容,并使用.sh或.bash作為文件擴(kuò)展名保存腳本。下面是一個(gè)簡(jiǎn)單的Shell腳本的基本結(jié)構(gòu)。在Shell腳本中,#!/bin/bash這一行指定了腳本的解釋器為/bin/bash,腳本文件在執(zhí)行時(shí)會(huì)實(shí)際調(diào)用/bin/bash程序,這行內(nèi)容也是Shell腳本的標(biāo)準(zhǔn)起始行。#!/bin/bashcat<<EOFThisisacommentlineThisisalsoacommentlineEOF#echo"helloworld"echo"helloworld"02Shell注釋Shell注釋Shell腳本中的注釋以#開頭,后面為注釋內(nèi)容??梢栽赟hell腳本的任何位置添加注釋,注釋會(huì)被解釋器忽略,不會(huì)影響腳本的執(zhí)行。下面是一個(gè)帶有注釋的Shell腳本。#!/bin/bash#Thisisacomment.#Thisscriptprints"Hello,World!"echo"Hello,World!"#Thislineisacommentandwillnotbeexecuted.Shell注釋在Shell腳本中使用注釋可以幫助用戶更好地理解腳本的功能,并使腳本更易于維護(hù)。在Shell腳本中,可以使用以下方法來(lái)注釋多行語(yǔ)句。#Thisisacommentline#Thisisalsoacommentline#Thisisyetanothercommentlinecat<<EOFThisisacommentlineThisisalsoacommentlineThisisyetanothercommentlineEOF#在這個(gè)腳本中,<<EOF和EOF之間的內(nèi)容都會(huì)被視為注釋,不會(huì)被解釋器執(zhí)行。使用<<將多行語(yǔ)句封裝在一對(duì)字符串中。使用#字符在每行的開頭注釋。在每行的開頭添加#字符可以將整行注釋掉。03執(zhí)行Shell腳本執(zhí)行Shell腳本在使用任何方法執(zhí)行腳本之前,需要確保腳本文件具有可執(zhí)行權(quán)限。如果腳本文件名為myscript.sh,可以使用chmod+xmyscript.sh命令為腳本文件賦予可執(zhí)行權(quán)限。在終端中可以使用絕對(duì)路徑或相對(duì)路徑來(lái)執(zhí)行腳本。例如,如果腳本文件名為myscript.sh,可以使用以下方法執(zhí)行腳本。在終端中使用相對(duì)路徑執(zhí)行腳本時(shí),需要將命令行的路徑切換到腳本目錄,腳本文件應(yīng)位于當(dāng)前目錄中,以“./文件名”的方式執(zhí)行腳本。[opencloud@server~]$bash/path/to/myscript.sh[opencloud@server~]$pwd/path/to/[opencloud@server~]$lsmyscript.sh[opencloud@server~]$./myscript.sh謝謝初識(shí)Shell腳本任務(wù)3:控制命令的輸入和輸出信息目錄/Contents01020304文件描述符輸入輸出重定向與管道符特殊文件/dev/null和/dev/zeroEOF特殊字符01文件描述符文件描述符在Linux系統(tǒng)中,文件描述符用于唯一標(biāo)識(shí)并追蹤系統(tǒng)中的一個(gè)打開的文件、管道、網(wǎng)絡(luò)連接或其他輸入/輸出資源。操作系統(tǒng)通過(guò)文件描述符來(lái)管理所有的資源訪問(wèn),這包括讀寫操作,使文件描述符成為程序與資源交互的核心。文件描述符的應(yīng)用非常廣泛,例如,在大多數(shù)Linux系統(tǒng)中,標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤默認(rèn)被分配到文件描述符0、1和2。此外,當(dāng)程序打開文件或創(chuàng)建網(wǎng)絡(luò)套接字時(shí),系統(tǒng)分配的文件描述符使得后續(xù)的所有操作(如數(shù)據(jù)讀取和發(fā)送)都通過(guò)這些描述符進(jìn)行。文件描述符的管理由操作系統(tǒng)負(fù)責(zé),確保在程序結(jié)束時(shí)關(guān)閉所有打開的描述符。程序也可以顯式關(guān)閉文件描述符以釋放資源。此外,操作系統(tǒng)對(duì)每個(gè)進(jìn)程可用的文件描述符數(shù)量有限制,這可以通過(guò)系統(tǒng)設(shè)置或動(dòng)態(tài)調(diào)整,超出限制將導(dǎo)致打開文件或套接字操作失敗。文件描述符在Linux系統(tǒng)中設(shè)備文件和文件描述符的關(guān)系及其工作流程,具體步驟如下:設(shè)備注冊(cè)(Devicesregister):圖中藍(lán)色箭頭指向鍵盤和顯示器,表明這些設(shè)備通過(guò)內(nèi)核注冊(cè),因此它們被系統(tǒng)賦予了文件接口。在Unix系統(tǒng)中,大多數(shù)設(shè)備都通過(guò)特殊的文件在文件系統(tǒng)中被表示,這些特殊文件通常位于/dev目錄下。打開文件(Openingthefile):圖中綠色箭頭展示了使用open函數(shù)打開一個(gè)設(shè)備文件(例如,光驅(qū)/dev/sr0),系統(tǒng)將會(huì)返回一個(gè)文件描述符。這個(gè)過(guò)程涉及系統(tǒng)調(diào)用,該調(diào)用返回一個(gè)與設(shè)備文件相關(guān)聯(lián)的文件描述符(一個(gè)整數(shù)值),此后對(duì)文件的操作都會(huì)使用這個(gè)描述符。文件描述符引用(Furtherreferences):圖中紅色箭頭表示進(jìn)一步的對(duì)文件描述符的引用(如讀取和寫入操作)將被內(nèi)核路由到對(duì)應(yīng)的設(shè)備上。當(dāng)執(zhí)行如read函數(shù)這樣的系統(tǒng)調(diào)用時(shí),你會(huì)通過(guò)文件描述符來(lái)指定要操作的設(shè)備,然后系統(tǒng)將數(shù)據(jù)從設(shè)備傳送到程序中(或反之)。02輸入輸出重定向與管道符輸入輸出重定向與管道符在Linux操作系統(tǒng)中,標(biāo)準(zhǔn)輸入通常是指鍵盤,標(biāo)準(zhǔn)輸出通常是指屏幕,標(biāo)準(zhǔn)錯(cuò)誤輸出通常也是指屏幕。通過(guò)使用輸入輸出重定向可以改變命令的輸入或輸出的來(lái)源或目的地,進(jìn)而改變命令的輸入或輸出方式。重定向可以讓命令行中執(zhí)行的命令從標(biāo)準(zhǔn)輸入或標(biāo)準(zhǔn)輸出轉(zhuǎn)移到其他位置。在實(shí)際的命令行操作中,這種機(jī)制常通過(guò)|符號(hào)表示,例如command1|command2,其中command1的輸出會(huì)成為command2的輸入。這使得用戶可以組合多個(gè)簡(jiǎn)單命令來(lái)執(zhí)行復(fù)雜的任務(wù)。Linux系統(tǒng)中程序默認(rèn)打開的三個(gè)標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。文件描述符StandardInput:代表標(biāo)準(zhǔn)輸入(stdin),其文件描述符是0。標(biāo)準(zhǔn)輸入通常來(lái)自鍵盤,是程序讀取輸入的主要途徑。StandardOutput:代表標(biāo)準(zhǔn)輸出(stdout),其文件描述符是1,標(biāo)準(zhǔn)輸出是程序正常輸出的去向,通常指的是顯示在屏幕上的文本。StandardError:代表標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr),其文件描述符是2。當(dāng)程序需要輸出錯(cuò)誤消息或警告時(shí),它們通常會(huì)被發(fā)送到這個(gè)文件,即使標(biāo)凘輸出被重定向到別處,錯(cuò)誤消息通常仍然會(huì)顯示在屏幕上。Linux進(jìn)程和管道(pipeline)之間的關(guān)系如下圖所示:左側(cè):我們看到一個(gè)進(jìn)程,它有標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯(cuò)誤(stderr),分別對(duì)應(yīng)文件描述符0、1和2。此外,也有其他的文件描述符,從3開始,用于打開更多文件。右側(cè):另一個(gè)進(jìn)程也具有stdin、stdout和stderr,也有可能打開更多的文件描述符。管道(Pipeline):位于兩個(gè)進(jìn)程之間,表示數(shù)據(jù)從左側(cè)進(jìn)程的標(biāo)準(zhǔn)輸出被傳送到右側(cè)進(jìn)程的標(biāo)準(zhǔn)輸入。這是Linux中進(jìn)程間通信的一種常用方式,允許一個(gè)進(jìn)程的輸出直接作為另一個(gè)進(jìn)程的輸入。文件描述符輸入輸出重定向與管道符ls>output.txt此命令會(huì)將ls命令的輸出寫入文件output.txt。如果文件不存在,則會(huì)創(chuàng)建文件;如果文件已存在,則會(huì)覆蓋文件中的內(nèi)容。使用>符號(hào)將輸出重定向到文件中l(wèi)s|greptxt此命令會(huì)將ls命令的輸出傳遞給grep命令,然后grep命令會(huì)搜索輸入中的txt字符串。這樣就可以通過(guò)兩個(gè)命令的結(jié)合來(lái)實(shí)現(xiàn)更復(fù)雜的功能。使用管道符將輸出傳遞給其他命令ls>>output.txt此命令會(huì)將ls命令的輸出追加到文件output.txt的末尾,之前已經(jīng)存在的內(nèi)容不會(huì)被覆蓋。使用>>符號(hào)將輸出追加到文件末尾sort<input.txt此命令會(huì)將文件input.txt中的內(nèi)容作為sort命令的輸入。使用<符號(hào)將輸入重定向到文件中在Linux操作系統(tǒng)中,可以使用>和<符號(hào)來(lái)實(shí)現(xiàn)輸入輸出重定向。具體來(lái)說(shuō),<符號(hào)可以將標(biāo)準(zhǔn)輸入重定向到文件中,而>符號(hào)可以將標(biāo)準(zhǔn)輸出重定向到文件中。在Linux操作系統(tǒng)中,可以使用管道來(lái)實(shí)現(xiàn)程序之間的通信。管道是一種特殊的文件,它可以在程序之間傳輸數(shù)據(jù)。例如,可以使用管道將一個(gè)程序的輸出作為另一個(gè)程序的輸入。在Linux中,管道符(|)是一種Shell運(yùn)算符,用于將一個(gè)命令的輸出作為另一個(gè)命令的輸入。這樣就可以使用多個(gè)命令來(lái)實(shí)現(xiàn)更復(fù)雜的功能。輸入輸出重定向與管道符常見的輸入輸出重定向符號(hào)和示例:操作符描述示例結(jié)果說(shuō)明<標(biāo)準(zhǔn)輸入重定向command<file將文件file的內(nèi)容作為command的輸入<<追加標(biāo)準(zhǔn)輸入(Heredocument)command<<END<br>text<br>END將直至遇到END標(biāo)記之前的所有輸入文本作為command的輸入>標(biāo)準(zhǔn)輸出重定向(覆蓋文件)command>file將command的輸出寫入到file,如果file存在,則覆蓋>>標(biāo)準(zhǔn)輸出重定向(追加到文件)command>>file將command的輸出追加到file的末尾,不會(huì)覆蓋原有內(nèi)容&>標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向(覆蓋文件)command&>file將command的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都重定向到file,覆蓋內(nèi)容&>>標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤重定向(追加到文件)command&>>file將command的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤都追加到file的末尾2>標(biāo)準(zhǔn)錯(cuò)誤重定向(覆蓋文件)command2>file將command的標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到file,覆蓋內(nèi)容2>>標(biāo)準(zhǔn)錯(cuò)誤重定向(追加到文件)command2>>file將command的標(biāo)準(zhǔn)錯(cuò)誤輸出追加到file的末尾2>&1將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出command>file2>&1將command的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤合并后重定向到file03特殊文件/dev/null和/dev/zero特殊文件/dev/null/dev/zero在Linux操作系統(tǒng)中,字符類型的文件通常為設(shè)備文件。設(shè)備文件是指表示輸入輸出設(shè)備的特殊文件,它們不存儲(chǔ)數(shù)據(jù),而是存儲(chǔ)特定的信息,這些信息對(duì)應(yīng)設(shè)備的輸入輸出。字符類型的文件可以用于表示如終端、串行端口、打印機(jī)等設(shè)備。與普通文件不同的是,設(shè)備文件的內(nèi)容由設(shè)備本身的特性決定。設(shè)計(jì)字符類型文件的目的是方便系統(tǒng)管理員和程序員通過(guò)文件系統(tǒng)調(diào)用來(lái)操作設(shè)備,為其他程序提供某些特定的輸入或輸出操作,而不必直接和設(shè)備打交道。特殊文件/dev/null/dev/zero/dev/null/dev/null是一個(gè)特殊的字符類型文件,也被稱為“黑洞文件”,寫入它的內(nèi)容都會(huì)被丟棄,并且讀取它時(shí)會(huì)返回空,通常用于丟棄不需要的輸出或者忽略不需要的輸入,即丟棄不需要的數(shù)據(jù)。/dev/null常被用來(lái)作為命令的輸出或者輸入的“垃圾桶”,可以起到清空或忽略命令的輸出的作用。如command>/dev/null會(huì)靜默執(zhí)行命令,不在控制臺(tái)上顯示任何輸出。/dev/zero/dev/zero是一個(gè)特殊的設(shè)備文件,它可以產(chǎn)生無(wú)限的空字符(即0值字節(jié))。/dev/zero在被讀取時(shí)會(huì)提供無(wú)限的空字符,其典型用法包括用它提供的字符流來(lái)覆蓋信息,以及產(chǎn)生一個(gè)特定大小的空白文件。特殊文件/dev/null/dev/zero創(chuàng)建一個(gè)名為file.bin、大小為1MB的文件:ddif=/dev/zeroof=file.binbs=1Mcount=1使用以下命令將命令的輸出重定向到/dev/null:echo"Thismessagewillbediscarded">/dev/null

忽略命令的輸出信息command2>/dev/null

忽略命令的錯(cuò)誤信息,/dev/null通常用于丟棄不需要的輸出ls-l/non-existent-dir2>/dev/null使用2>/dev/null進(jìn)行輸出重定向,表示將標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到/dev/null,這樣就可以忽略ls命令的錯(cuò)誤輸出04EOF特殊字符EOF特殊字符EOF(EndofFile,文件結(jié)束標(biāo)志)是一個(gè)特殊的字符串,表示文件的末尾或者輸入流的結(jié)束,可以作為一種特殊的輸入重定向符號(hào),通常用來(lái)將多行文本傳遞給命令,而不用將文本保存到文件中。在Shell腳本中,EOF常用于在腳本中嵌入多行文本,而不需要使用多個(gè)echo命令或使用其他文件來(lái)存儲(chǔ)文本。EOF可以用在以下場(chǎng)景中:從標(biāo)準(zhǔn)輸入中讀取多行文本、將多行文本輸出到文件中、將多行文本追加到文件中、將多行文本作為參數(shù)傳遞給命令。EOF特殊字符使用下面的命令將多行文本輸入cat命令:cat<<EOF>>eof-stdin.txtThisisline1Thisisline2Thisisline3EOF#查看eof-stdin.txt文件內(nèi)容cateof-stdin.txtThisisline1Thisisline2Thisisline3在上面的命令中,EOF前面的<<是輸入重定向符號(hào),表示從這里開始的輸入都將被重定向到cat命令,>>eof-stdin.txt表示將輸入的內(nèi)容輸出到eof-stdin.txt文件中。注意:最后的EOF必須獨(dú)占一行,且前面不能有任何字符。EOF特殊字符若在腳本中包含一個(gè)SQL(StructureQueryLanguage,結(jié)構(gòu)查詢語(yǔ)言)語(yǔ)句,可以使用EOF來(lái)嵌入該語(yǔ)句:mysql-uusername-ppassword<<EOFUSEmydatabase;SELECT*FROMmytable;EOF這個(gè)腳本會(huì)打開MySQL命令行工具,并使用用戶名和密碼登錄數(shù)據(jù)庫(kù),然后在mydatabase數(shù)據(jù)庫(kù)中執(zhí)行SELECT語(yǔ)句,輸出mytable表中的所有數(shù)據(jù)。謝謝初識(shí)Shell腳本項(xiàng)目4:數(shù)據(jù)輸入輸出目錄/Contents010203echo命令printf命令read命令01echo命令echo命令echo是一個(gè)常用的Shell命令。它的主要功能是輸出字符串,可以將指定的文本字符串輸出到標(biāo)準(zhǔn)輸出(默認(rèn)是屏幕),也可以用于輸出提示信息、調(diào)試信息、結(jié)果信息等。echo命令基本語(yǔ)法如下:echo[options]string序號(hào)命令選項(xiàng)描述1-n不輸出換行符,繼續(xù)在當(dāng)前行輸出2-e開啟轉(zhuǎn)義字符,可以使用轉(zhuǎn)義字符來(lái)輸出特殊字符3-E禁用轉(zhuǎn)義字符(默認(rèn)行為)其中,options表示可選的參數(shù),string表示要輸出的字符串。echo命令選項(xiàng)如下表所示。echo命令使用以下命令輸出字符串,當(dāng)輸出的字符串中包含空格或其他特殊字符時(shí),通常使用引號(hào)標(biāo)識(shí)字符串。例如:[opencloud@server~]$echo"Hello,World!"Hello,World![opencloud@server~]$echo-e"Hello,\tWorld!"Hello,World![opencloud@server~]$catecho.sh#!/bin/bashname="John"age=18echo"Mynameis$name,Iam$ageyearsold."#執(zhí)行腳本,輸出結(jié)果如下[opencloud@server~]$bashecho.shMynameisJohn,Iam18yearsold.使用以下命令輸出帶有轉(zhuǎn)義字符的字符串,例如:在腳本中,使用echo命令輸出變量的值,例如:echo命令在Shell中,echo命令支持一些常見的轉(zhuǎn)義符,可以用來(lái)輸出特殊字符。在使用轉(zhuǎn)義符時(shí),將字符串放在雙引號(hào)之內(nèi)。echo命令支持的轉(zhuǎn)義符如下表所示。序號(hào)轉(zhuǎn)義符含義1\反斜線2\b輸出退格字符(刪除字符)3\c不換行輸出字符串,繼續(xù)在當(dāng)前行輸出4\f輸出換頁(yè)符5\n輸出換行符6\r輸出回車符(回到行首)7\t輸出水平制表符8\v輸出垂直制表符9\e通常用于表示ANSI轉(zhuǎn)義碼,以便在終端中設(shè)置文本的顏色、樣式echo命令使用echo命令和常見轉(zhuǎn)義字符的一些示例:#使用echo命令不換行輸出字符串,繼續(xù)在當(dāng)前行輸出[opencloud@server~]$echo-e"Hello,\cWorld!"Hello,[opencloud@server~]$#輸出轉(zhuǎn)義字符:[opencloud@server~]$echo-e"\e"

#輸出換頁(yè)符[opencloud@server~]$echo-e"Hello,\fWorld!"Hello,World!#輸出換行符[opencloud@server~]$echo-e"Hello,\nWorld!"Hello,World!#輸出水平制表符[opencloud@server~]$echo-e"Hello,\tWorld!"Hello,World!#輸出垂直制表符[opencloud@server~]$echo-e"Hello,\vWorld!"Hello,World!02printf命令printf命令在Shell腳本中,printf命令主要用于格式化輸出字符串,輸出帶有特定格式的信息,例如輸出字符串、數(shù)字、字符、符號(hào)或者其他值。它與echo命令類似,但支持更多的格式化選項(xiàng)。printf命令基本語(yǔ)法如下:printfformat[argument]...format表示一個(gè)字符串,用于指定輸出的格式。它可以包含轉(zhuǎn)義序列,這些轉(zhuǎn)義序列用于指定輸出的格式和內(nèi)容。Argument表示一個(gè)或多個(gè)參數(shù),用于提供要輸出的內(nèi)容。printf命令printf命令需要在字符串中使用占位符,然后指定要輸出的值。它可以通過(guò)在字符串中包含一些格式說(shuō)明符,然后按照格式說(shuō)明符指定的格式將參數(shù)輸出到標(biāo)準(zhǔn)輸出。例如:printf"%-10s%-8s%-4s\n"姓名性別體重/kgprintf"%-10s%-8s%-4.2f\n"郭靖男66.1234printf"%-10s%-8s%-4.2f\n"楊過(guò)男68.6543printf"%-10s%-8s%-4.2f\n"郭芙女47.9876#輸出姓名

性別

體重/kg郭靖

男66.12楊過(guò)

男68.65郭芙

女47.99示例中,%-10s表示輸出一個(gè)左對(duì)齊且寬度為10的字符串,%-8s表示輸出一個(gè)左對(duì)齊且寬度為8的字符串,%-4.2f表示輸出一個(gè)左對(duì)齊且寬度為4,小數(shù)點(diǎn)后保留2位的浮點(diǎn)數(shù)。printf命令printf命令使用的占位符如下表所示。printf命令基本語(yǔ)法如下:序號(hào)占位符說(shuō)明1%s輸出字符串(string)2%c輸出單個(gè)字符(character)3%d輸出十進(jìn)制整數(shù)(decimalinteger)4%f輸出浮點(diǎn)數(shù)(floatingpointnumber)5%o輸出無(wú)符號(hào)八進(jìn)制整數(shù)(octalinteger)6%e輸出科學(xué)記數(shù)法(scientificnotation)形式的浮點(diǎn)數(shù)7%b輸出二進(jìn)制整數(shù)(binaryinteger)8%n輸出目前為止輸出的字符總數(shù)9%g輸出指定精度的浮點(diǎn)數(shù)10%x輸出無(wú)符號(hào)十六進(jìn)制整數(shù)(hexadecimalinteger)(小寫字母形式)11%X輸出十六進(jìn)制整數(shù)(大寫字母形式)12%(datefmt)T將參數(shù)以指定的日期和時(shí)間格式輸出(datefmt為日期和時(shí)間格式字符串)printf命令printf"Thefirstletterofthealphabetis%c\n"‘a(chǎn)’#輸出Thefirstletterofthealphabetisacharacters=('a''b''c')printf"Thecharactersare:%c%c%c\n""${characters[@]}“#輸出Thecharactersare:abcnames=('Alice''Bob''Eve')printf"Thenamesare:%s%s%s\n""${names[@]}“#輸出Theletteris:Zprintf命令使用%c格式化字符的示例如下。(1)輸出單個(gè)字符:(2)輸出字符數(shù)組中的所有字符:(3)輸出字符變量的值:printf命令printf"Thenameofthiswebsiteis%s\n""StackOverflow“#輸出ThenameofthiswebsiteisStackOverflownames=('Alice''Bob''Eve')printf"Thenamesare:%s%s%s\n""${names[@]}“#輸出Thenamesare:AliceBobEvegreeting='Hello,world!'printf"Thegreetingis:%s\n""$greeting“Thegreetingis:Hello,world!printf命令使用%s格式化字符串的示例如下。(1)輸出單個(gè)字符串:(2)輸出字符串?dāng)?shù)組中的所有字符串:(3)輸出字符變量的值:printf命令printf命令使用%d格式化字符串的示例如下。printf"Thenumberis:%d\n"42#輸出Thenumberis:42numbers=(123)printf"Thenumbersare:%d%d%d\n""${numbers[@]}“#輸出Thenumbersare:123count=5printf"Thecountis:%d\n""$count“#輸出Thecountis:5(1)輸出單個(gè)整數(shù):(2)輸出字符串?dāng)?shù)組中的所有字符串:(3)輸出字符變量的值:printf命令printf命令使用%b格式化字符串的示例如下。printf"Thenumberis:%b\n"5#輸出Thenumberis:101numbers=(567)printf"Thenumbersare:%b%b%b\n""${numbers[@]}“#輸出Thenumbersare:567binary=1101printf"Thebinarynumberis:%b\n""$binary“#輸出Thebinarynumberis:1101(1)輸出單個(gè)二進(jìn)制整數(shù):(2)輸出字符串?dāng)?shù)組中的所有字符串:(3)輸出字符變量的值:printf命令printf命令使用%n格式化字符串的示例如下。printf"Thereare%dcharactersinthisstring.%n"8countecho"Thevalueofcountis:$count“#輸出Thereare14charactersinthisstring.Thevalueofcountis:38strings=('Thisisstring1''Thisisstring2')printf"Thereare%dcharactersinstring1.%n"100count1printf"Thereare%dcharactersinstring2.%n"1000count2echo"Thevalueofcount1is:$count1"echo"Thevalueofcount2is:$count2“#輸出Thereare100charactersinstring1.Thereare1000charactersinstring2.Thevalueofcount1is:37Thevalueofcount2is:38(1)輸出單個(gè)二進(jìn)制整數(shù):(2)在字符串?dāng)?shù)組中使用%n:printf命令printf命令使用%(datefmt)T格式化日期和時(shí)間的示例如下。printf"Thecurrentdateandtimeis:%(%Y-%m-%d%H:%M:%S)T\n"#輸出Thecurrentdateandtimeis:2024-05-2517:38:32printf"Thedateandtimeis:%(%a%b%d%I:%M%p%Z%Y)T\n"#輸出Thedateandtimeis:ThuApr2505:39PMCST2024(1)輸出當(dāng)前日期和時(shí)間:(2)在字符串?dāng)?shù)組中使用%n:03read命令read命令在Shell腳本中,read命令是一個(gè)內(nèi)置命令,用于從標(biāo)準(zhǔn)輸入(通常是鍵盤)中讀取一行文本并將其賦值給一個(gè)或多個(gè)變量。該命令通常用于在腳本運(yùn)行時(shí)從用戶那里獲取輸入。read命令的基本語(yǔ)法如下:read[options]variable1[variable2...]其中,options表示可選的選項(xiàng),可以用于指定輸入的格式;variable1表示一個(gè)變量名,將保存讀取的輸入值;variable2表示可選項(xiàng),用于將多個(gè)變量賦為輸入的值。read命令read命令常見選項(xiàng)如下表所示。序號(hào)選項(xiàng)描述1-p指定提示符,用于在輸入之前展示給用戶2-r禁止轉(zhuǎn)義字符的解釋3-n指定最多讀取的字符數(shù)4-d指定一個(gè)字符作為結(jié)束符,遇到此字符時(shí)將會(huì)終止讀取5-s禁止回顯用戶輸入的字符,隱藏其輸入的內(nèi)容6-t指定超時(shí)時(shí)間,即在指定的時(shí)間內(nèi)沒有輸入將會(huì)終止讀取使用read命令讀取變量并輸出:[opencloud@server~]$catread.sh#!/bin/bashread-p"Whatisyourname?"nameecho"Hello,$name"執(zhí)行腳本:[opencloud@server~]$bashread.shWhatisyourname?#在命令行中輸入tomjerry并按Enter鍵Hello,tomjerryread命令在這個(gè)示例中,腳本會(huì)輸出一行提示,詢問(wèn)用戶的名字。然后,腳本將等待用戶輸入名字,并將輸入的值賦給變量name。最后,腳本將輸出一行提示。使用read命令,向用戶詢問(wèn)密碼,并隱藏其輸入的內(nèi)容:[opencloud@server~]$read-sp"Enteryourpassword:"passwordEnteryourpassword:#輸入任何字符串,不會(huì)顯示在屏幕上[opencloud@server~]$read-n1-p"Enteranumber:"numberEnteranumber:1在這個(gè)示例中,腳本會(huì)輸出一行提示,詢問(wèn)用戶輸入密碼。然后,腳本將等待用戶輸入密碼,輸入的內(nèi)容將被隱藏。最后,輸入的值被賦給變量password。使用read命令,向用戶詢問(wèn)數(shù)字,只讀取一個(gè)字符:在這個(gè)示例中,腳本會(huì)輸出一行提示,詢問(wèn)用戶輸入數(shù)字。然后,腳本將等待用戶輸入一個(gè)字符,并將輸入的值賦給變量number。謝謝初識(shí)Shell腳本項(xiàng)目5:Shell變量目錄/Contents010203定義和調(diào)用變量預(yù)設(shè)位置參數(shù)變量查看環(huán)境變量04設(shè)置環(huán)境變量01定義和調(diào)用變量變量名01變量名是變量的唯一標(biāo)識(shí),通常是一個(gè)字母或下畫線開頭的字符序列,例如name、age、_score等。變量類型02在Shell中,變量可以存儲(chǔ)任何類型的數(shù)據(jù),例如整數(shù)、浮點(diǎn)數(shù)、字符串、布爾值等。變量值03變量值是指變量當(dāng)前存儲(chǔ)的數(shù)據(jù)。在Shell中,變量值可以通過(guò)賦值語(yǔ)句來(lái)修改。變量作用域04變量作用域是指變量的有效范圍。在Shell中,變量可以被定義為全局變量或局部變量。全局變量是指在整個(gè)Shell會(huì)話中都有效的變量。定義和調(diào)用變量05在定義變量時(shí),變量名和變量值之間需要使用等號(hào)(=)連接,變量名與等號(hào)之間不能有空格。在調(diào)用變量時(shí),變量名需要使用$符號(hào)引用。在編程語(yǔ)言中,變量是一種存儲(chǔ)數(shù)據(jù)的容器。它可以用來(lái)保存各種類型的數(shù)據(jù),例如數(shù)字、字符串、布爾值等。在Shell中,變量也是一種存儲(chǔ)數(shù)據(jù)的容器,它有著與其他編程語(yǔ)言中的變量類似的基本概念,主要包括以下內(nèi)容。定義和調(diào)用變量定義和調(diào)用變量

Shell中主要的變量類型:序號(hào)變量類型描述1字符串變量用戶自定義變量,用于存儲(chǔ)字符串?dāng)?shù)據(jù)的變量,可以使用單引號(hào)或雙引號(hào)來(lái)指定字符串2數(shù)值變量用戶自定義變量,用于存儲(chǔ)數(shù)字?jǐn)?shù)據(jù)的變量,可以使用整數(shù)或浮點(diǎn)數(shù)3數(shù)組變量用戶自定義變量,用于存儲(chǔ)多個(gè)值的變量,每個(gè)值稱為數(shù)組元素。數(shù)組變量是用來(lái)存儲(chǔ)一個(gè)有序列表(list)的變量。數(shù)組元素可以通過(guò)一個(gè)整數(shù)索引來(lái)訪問(wèn),索引從0開始4環(huán)境變量系統(tǒng)級(jí)別的變量,用于存儲(chǔ)系統(tǒng)的配置信息。主要的環(huán)境變量有HOME、PATH、PS1、PS2等5路徑變量用于存儲(chǔ)文件路徑的環(huán)境變量,即存儲(chǔ)可執(zhí)行文件的搜索路徑的變量6預(yù)設(shè)變量Shell內(nèi)置的變量,例如$0、$1、$*、$@、$?、$!等。這些變量在Shell中已經(jīng)定義好,不需要用戶手動(dòng)定義定義和調(diào)用變量在Shell中,可以使用賦值語(yǔ)句來(lái)定義變量。賦值語(yǔ)句的格式如下:#定義字符串變量name="JohnSmith"#定義數(shù)值變量age=30#定義數(shù)值變量fruits=("apple""banana""orange")#定義浮點(diǎn)數(shù)變量HEIGHT=1.75#定義布爾值變量IS_ADMIN=true下面是在Shell中定義變量的幾個(gè)示例:varname=varvalue其中,varname表示變量名,varvalue表示變量值。定義和調(diào)用變量一些特殊的變量,例如$0、$1等,是由Shell自動(dòng)賦值的,用于存儲(chǔ)特定的信息。例如,$0變量存儲(chǔ)的是腳本的文件名,$1變量存儲(chǔ)的是腳本的第一個(gè)參數(shù)。在Shell中,要訪問(wèn)變量的值,可以使用$varname的形式,即在變量名前面加上符號(hào)“$”。例如:#定義字符串變量NAME="JohnSmith"#訪問(wèn)變量的值echo"Nameis$NAME"#輸出:NameisJohnSmith定義和調(diào)用變量如果變量名中包含其他字符和特殊字符,或者變量名和其他文本混合在一起,需要使用花括號(hào)“{}”來(lái)指定變量名。例如:#定義字符串變量NAME="John"#訪問(wèn)變量的值echo"Nameis${NAME}_Smith"#輸出:NameisJohn_Smith定義和調(diào)用變量如果不使用花括號(hào),等號(hào)右邊的字符會(huì)被當(dāng)作變量的一部分,從而導(dǎo)致錯(cuò)誤。例如:#定義字符串變量name="John"#使用變量echo"Hello,$name_Doe!"#輸出:Hello,!在這種情況下,變量名后面的_Doe被當(dāng)作變量的一部分,因此會(huì)返回空字符串。因此,在使用變量時(shí),如果變量名后面跟有其他字符或者變量名組成的字符串,通常需要使用花括號(hào)來(lái)指明變量名的邊界。定義和調(diào)用變量在使用變量的特殊語(yǔ)法時(shí),也需要使用花括號(hào)。例如,在使用${var:pos}和${var:pos:len}的形式訪問(wèn)變量值的子字符串時(shí),需要使用花括號(hào),其中,var是變量的名稱,pos是起始位置的偏移量,表示從變量值的第pos個(gè)字符開始,返回變量值的子字符串,len是子字符串的長(zhǎng)度,表示從變量值的第pos個(gè)字符開始,返回長(zhǎng)度為len的子字符串。例如:注意,如果pos或len超出了變量值的長(zhǎng)度范圍,將返回空字符串。#定義字符串變量name="John"#調(diào)用變量,從字符串變量name的第二個(gè)字符(由0開始計(jì)數(shù))開始,截取到字符串的末尾echo"${name:1}"輸出:ohn#定義字符串變量name="John"#調(diào)用變量,從字符串變量name的第二個(gè)字符(由0開始計(jì)數(shù))開始截取,截取長(zhǎng)度為2echo"${name:1:2}"#輸出:oh02預(yù)設(shè)位置參數(shù)變量預(yù)設(shè)位置參數(shù)變量在Shell中,有許多系統(tǒng)預(yù)設(shè)變量,可以方便地用于訪問(wèn)系統(tǒng)信息和執(zhí)行狀態(tài)。其中,位置參數(shù)變量主要用來(lái)向腳本中傳遞參數(shù)或數(shù)據(jù),其變量名不能自定義,變量作用也是固定的。常見的系統(tǒng)預(yù)設(shè)位置參數(shù)變量如表:序號(hào)位置參數(shù)變量描述1$0腳本文件名2$1—$9腳本前9個(gè)位置參數(shù)3$#傳遞給腳本的參數(shù)數(shù)量4$@腳本的命令行參數(shù)的數(shù)組5$*腳本的命令行參數(shù)的字符串6$?上一個(gè)命令的退出狀態(tài)7$$當(dāng)前Shell進(jìn)程的進(jìn)程ID8$!后臺(tái)運(yùn)行的最后一個(gè)進(jìn)程的PID(ProcessIdentifier,進(jìn)程控制符)03查看環(huán)境變量查看環(huán)境變量在Linux操作系統(tǒng)中,環(huán)境變量是一種特殊的變量,它們用于存儲(chǔ)系統(tǒng)的配置信息。環(huán)境變量是系統(tǒng)級(jí)別的變量,它們可以在整個(gè)系統(tǒng)中使用,并且在用戶的會(huì)話中也可以使用。環(huán)境變量通常用于存儲(chǔ)系統(tǒng)路徑、可執(zhí)行文件的名稱、用戶名等信息。系統(tǒng)預(yù)設(shè)環(huán)境變量的命名規(guī)則通常是采用全大寫字母。常見的系統(tǒng)預(yù)設(shè)環(huán)境變量如表所示。序號(hào)環(huán)境變量描述1HOME當(dāng)前用戶的家目錄路徑2PATH可執(zhí)行文件的搜索路徑3SHELL當(dāng)前使用的Shell的路徑4USER當(dāng)前用戶的用戶名5LANG系統(tǒng)的默認(rèn)語(yǔ)言環(huán)境6PWD當(dāng)前工作目錄的路徑7HOSTNAME主機(jī)名8PS1系統(tǒng)提示符9TERM終端類型10HISTFILE歷史命令記錄文件的路徑11HISTSIZE歷史命令記錄文件的大小12MACHTYPE系統(tǒng)的硬件架構(gòu)和操作系統(tǒng)類型x86_64-redhat-linux-gnu01使用printenv命令查看系統(tǒng)中所有的環(huán)境變量。[opencloud@server~]$printenv02使用echo命令查看某個(gè)特定的環(huán)境變量的值。#查看HOME環(huán)境變量的值[opencloud@server~]$echo"$HOME“/home/opencloud#查看LANG環(huán)境變量的值[opencloud@server~]$echo"$LANG"en_US.UTF-803使用env命令查看當(dāng)前進(jìn)程的環(huán)境變量。[opencloud@server~]$env04使用set命令查看當(dāng)前Shell的所有變量,包括環(huán)境變量和Shell變量。[opencloud@server~]$set05使用cat/proc/PID/environ命令查看某個(gè)進(jìn)程的環(huán)境變量。#查看進(jìn)程9750的環(huán)境變量[opencloud@server~]$cat/proc/9750/environ在Linux操作系統(tǒng)中,可以使用以下方法查看環(huán)境變量定義和調(diào)用變量04設(shè)置環(huán)境變量設(shè)置環(huán)境變量在Shell中,export命令用于將變量設(shè)置為環(huán)境變量,設(shè)置的環(huán)境變量可以在整個(gè)系統(tǒng)中使用,并且在用戶的會(huì)話中也可以使用。export命令的基本語(yǔ)法如下:

export[變量名]=[變量值]使用export命令設(shè)置環(huán)境變量及其查看驗(yàn)證方法,如下:(1)使用等號(hào)賦值。例如:[opencloud@server~]$exportNAME="John"[opencloud@server~]$exportMYHOME="/home/john“注意:在Shell中,環(huán)境變量通常使用大寫字母。(2)使用echo命令查看環(huán)境變量的值。例如:[opencloud@server~]$echo$NAMEJohn[opencloud@server~]$echo$MYHOME/home/john設(shè)置環(huán)境變量(3)使用環(huán)境變量的當(dāng)前值。例如:[opencloud@server~]$echo$PATH/home/opencloud/.local/bin:/home/opencloud/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin:/usr/local/sbin[opencloud@server~]$exportPATH=$PATH:/usr/local/bin[opencloud@server~]$echo$PATH#查看PATH環(huán)境變量輸出結(jié)果/home/opencloud/.local/bin:/home/opencloud/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin:/usr/local/sbin:/usr/local/bin#export命令將/usr/local/bin目錄添加到系統(tǒng)路徑中export命令設(shè)置的環(huán)境變量只對(duì)當(dāng)前Shell有效,在關(guān)閉Shell后將失效。如果想永久設(shè)置環(huán)境變量,建議在配置文件中設(shè)置。例如在/etc/profile或~/.bash_profile~/.bashrc等配置文件中設(shè)置。設(shè)置環(huán)境變量使用export命令在~/.bashrc文件中設(shè)置MYVAR環(huán)境變量,可以使用以下命令:在修改環(huán)境變量所在配置文件之后,需要重新登錄系統(tǒng)或在命令行中使用source命令來(lái)使配置生效。source命令的主要作用是加載并執(zhí)行配置文件。使用source命令加載配置文件的好處是,可以在當(dāng)前Shell中使修改立即生效,而不需要重新打開一個(gè)新的Shell。[opencloud@server~]$echo"exportMYVAR=123">>~/.bashrc~表示當(dāng)前用戶的家目錄,export命令會(huì)將exportMYVAR=123添加到~/.bashrc文件的末尾,從而設(shè)置MYVAR環(huán)境變量。設(shè)置環(huán)境變量使用source命令,讓~/.bashrc文件中設(shè)置的MYVAR環(huán)境變量生效:此外,也可以使用source命令加載系統(tǒng)級(jí)別的配置文件。這樣,在/etc/bashrc文件中定義的環(huán)境變量、別名等就可以在當(dāng)前的Shell中使用了。[opencloud@server~]$source~/.bashrc查看MYVAR環(huán)境變量的值:[opencloud@server~]$echo"$MYVAR"#輸出:123[opencloud@server~]$source/etc/bashrc設(shè)置環(huán)境變量在Linux操作系統(tǒng)中,環(huán)境變量可以存儲(chǔ)在多個(gè)文件中。下面是常見的存儲(chǔ)環(huán)境變量的文件。(1)/etc/environment:系統(tǒng)級(jí)別的文件,可以存儲(chǔ)所有用戶的環(huán)境變量。(2)/etc/profile:系統(tǒng)級(jí)別的文件,適用于所有用戶,在系統(tǒng)啟動(dòng)時(shí)加載,可以存儲(chǔ)全局的環(huán)境變量。(3)/etc/bashrc:文件系統(tǒng)級(jí)別的Bash配置文件,通常用于設(shè)置Bash的默認(rèn)行為。(4)~/.bashrc:用戶級(jí)別的文件,在登錄系統(tǒng)時(shí)加載,可以存儲(chǔ)用戶的環(huán)境變量。(5)~/.bash_profile:用戶級(jí)別的文件,在登錄系統(tǒng)時(shí)加載,可以存儲(chǔ)用戶的環(huán)境變量。(6)~/.bash_login:用戶級(jí)別的文件,在登錄系統(tǒng)時(shí)加載,可以存儲(chǔ)用戶的環(huán)境變量。(7)~/.bash_logout:用戶級(jí)別的文件,在退出登錄系統(tǒng)時(shí)加載,可以存儲(chǔ)用戶的環(huán)境變量。如果想修改系統(tǒng)級(jí)別的環(huán)境變量,建議修改/etc/profile文件。如果想修改Bash的默認(rèn)行為,建議修改/etc/bashrc文件。謝謝初識(shí)Shell腳本項(xiàng)目6:轉(zhuǎn)義符目錄/Contents01020304反斜杠反引號(hào)雙引號(hào)單引號(hào)01反斜杠01轉(zhuǎn)義序列通常有兩種功能。第一種功能是編碼無(wú)法用字母表直接表示的特殊數(shù)據(jù)。第二種功能是表示無(wú)法直接通過(guò)鍵盤輸入的字符(如回車符)。02本節(jié)說(shuō)的轉(zhuǎn)義符就對(duì)應(yīng)第二種功能,即將轉(zhuǎn)義字符自身和后面的字符看成一個(gè)整體,表示某種含義。常見的示例是用反斜線字符“\”作為轉(zhuǎn)義字符,表示那些不可打印的ASCII控制符。在計(jì)算機(jī)科學(xué)與遠(yuǎn)程通信中,當(dāng)轉(zhuǎn)義字符放在字符序列中,它將對(duì)它后續(xù)的幾個(gè)字符進(jìn)行替代并解釋。通常,判定某字符是否為轉(zhuǎn)義字符由上下文確定。轉(zhuǎn)義字符即標(biāo)志著轉(zhuǎn)義序列開始的那個(gè)字符。反斜杠反斜杠在日常工作中經(jīng)常會(huì)遇到轉(zhuǎn)義字符,比如我們?cè)赟hell中刪除文件,如果文件名中有*號(hào),我們就需要轉(zhuǎn)義,此時(shí)我們能看到,使用了轉(zhuǎn)義字符后,*號(hào)就能放進(jìn)文件名里了。rmaccess_log*#刪除當(dāng)前目錄下文件名以access_log開頭的文件rmaccess_log\*#刪除當(dāng)前目錄下文件名為access_log*的文件printf"Thisisastringwith\"doublequotes\"insideit.\n“#輸出Thisisastringwith"doublequotes"insideit.在雙引號(hào)中又使用雙引號(hào),這時(shí)候就需要轉(zhuǎn)義,轉(zhuǎn)義之后才能正常表示雙引號(hào),否則會(huì)報(bào)語(yǔ)法錯(cuò)誤。比如下面的示例,雙引號(hào)中的“doublequotes”也有雙引號(hào)。反斜杠轉(zhuǎn)義符“\”是一個(gè)特殊字符,用于改變一些字符的含義。例如,可以使用轉(zhuǎn)義符來(lái)輸出特殊字符,或者將特殊字符視為普通字符。在Shell中有很多元字符,如果要查找星號(hào)(*)、加號(hào)(+)、問(wèn)號(hào)(?)本身,而不是元字符,這時(shí)候就需要對(duì)其進(jìn)行轉(zhuǎn)義。常見的轉(zhuǎn)義符如下表所示。序號(hào)轉(zhuǎn)義符描述1\轉(zhuǎn)義字符2\\代表一個(gè)反斜線字符3\’代表一個(gè)單引號(hào)字符4\”代表一個(gè)雙引號(hào)字符5\n換行符,將當(dāng)前位置移到下一行開頭6\r回車符,將當(dāng)前位置移到本行開頭7\t水平制表符(跳到下一個(gè)制表位)8\v垂直制表符反斜杠使用以下命令輸出一個(gè)反斜線字符:echo-e"Hello\tWorld“#輸出HelloWorld.echo"\\“#輸出\echo-e"Hello\nWorld“#輸出HelloWorld轉(zhuǎn)義符也可以用來(lái)輸出其他特殊字符。使用以下命令換行符:使用以下命令輸出一個(gè)水平制表符:02反引號(hào)反引號(hào)在Shell中,反引號(hào)(`)字符用于標(biāo)識(shí)被執(zhí)行的命令,并且命令的輸出會(huì)替換反引號(hào)中的內(nèi)容,這種方式稱為命令替換。使用命令替換將命令的輸出賦給一個(gè)變量:foo=`date`echo$fooMonJan915:16:27CST2023echoTodayis`date`TodayisThuNov2305:33:29PMCST2023使用命令替換在其他命令中包含命令的輸出:注意,反引號(hào)字符和單引號(hào)(')字符不同,單引號(hào)用于標(biāo)識(shí)應(yīng)該被當(dāng)作字面值處理的字符串,而不對(duì)其進(jìn)行任何解釋或替換03雙引號(hào)雙引號(hào)在Shell中,雙引號(hào)(")是一種特殊的字符,用于標(biāo)識(shí)帶有變量或轉(zhuǎn)義字符的字符串。雙引號(hào)作為轉(zhuǎn)義符,可以方便地在字符串中輸出變量的值,以及輸出特殊字符。使用雙引號(hào)時(shí),變量名會(huì)被替換為變量的值,而轉(zhuǎn)義字符會(huì)按照其原來(lái)的意義被解釋。例如:name="John"echo"Mynameis$name"echo"Thisisa\"quote\"“#輸出MynameisJohnThisisa"quote"04單引號(hào)單引號(hào)在Shell腳本中,單引號(hào)(')是一種特殊的字符,用于標(biāo)識(shí)字符串,其中的內(nèi)容不會(huì)被解釋。單引號(hào)作為轉(zhuǎn)義符,可以方便地保留字符串中的內(nèi)容。使用單引號(hào)時(shí),變量名和轉(zhuǎn)義字符都不會(huì)被替換或解釋。例如:name="John"echo'Mynameis$name'echo'Thisisa\"quote\“’#輸出Mynameis$nameThisisa\"quote\"echo'Thisisa'"'"'quote'"'"‘’#輸出Thisisa'quote'如果需要在單引號(hào)內(nèi)輸出單引號(hào)本身,可以使用3個(gè)單引號(hào)。例如:謝謝初識(shí)Shell腳本項(xiàng)目7:算術(shù)運(yùn)算目錄/Contents0102算術(shù)運(yùn)算符其他運(yùn)算方法01算術(shù)運(yùn)算符算術(shù)運(yùn)算符Shell中常用的算術(shù)運(yùn)算方法有使用let命令進(jìn)行算術(shù)運(yùn)算、使用expr命令進(jìn)行算術(shù)運(yùn)算、使用bc命令進(jìn)行算術(shù)運(yùn)算、使用運(yùn)算語(yǔ)法$[算術(shù)表達(dá)式]、使運(yùn)算語(yǔ)法$((算術(shù)表達(dá)式))等。在shell中可以使用各種運(yùn)算符來(lái)執(zhí)行各種運(yùn)算,這些運(yùn)算主要有以下幾類:運(yùn)算符描述算術(shù)運(yùn)算符運(yùn)算符號(hào)包括+(加)、-(減)、*(乘)、/(除)和%(取余)等。

關(guān)系運(yùn)算符用于比較兩個(gè)數(shù)的大小,運(yùn)算符號(hào)包括等于(-eq)、不等于(-ne)、大于(-gt)、小于()、大于或等于(-ge)和小于或等于(-le)等。邏輯運(yùn)算符用于比較兩個(gè)布爾值的真假,運(yùn)算符號(hào)包括&&(邏輯與)、||(邏輯或)和!(邏輯非)等。

字符串運(yùn)算符用于比較兩個(gè)字符串的大小,運(yùn)算符號(hào)包括=(等于)、!=(不等于)和-z(是否為空字符串)等。

文件測(cè)試運(yùn)算符用于檢查和判斷文件的屬性和狀態(tài),運(yùn)算符號(hào)包括-e(文件是否存在)、-r(文件是否可讀)、-w(文件是否可寫)和-x(文件是否可執(zhí)行)等。

算術(shù)運(yùn)算符默認(rèn)情況下,如果不特別指明,Shell不直接進(jìn)行算術(shù)運(yùn)算,而是把算術(shù)運(yùn)算符解釋為字符串連接符,相當(dāng)于兩個(gè)字符串拼接在一起,形成一個(gè)新的字符串。Shell支持的常見的算術(shù)運(yùn)算符如表:序號(hào)

運(yùn)算符描述1+加法運(yùn)算2++自增運(yùn)算(將變量值加1)3-減法運(yùn)算4--自減運(yùn)算(將變量值減1)5*乘法運(yùn)算6/除法運(yùn)算7%取余運(yùn)算8=賦值運(yùn)算9+=加法賦值運(yùn)算(將變量值加上一個(gè)值,結(jié)果賦值給變量)10-=減法賦值運(yùn)算(將變量值減去一個(gè)值)11*=乘法賦值運(yùn)算(將變量值乘一個(gè)值,結(jié)果賦值給變量)12/=除法賦值運(yùn)算(將變量值除以一個(gè)值,結(jié)果賦值給變量)算術(shù)運(yùn)算符算術(shù)運(yùn)算符的優(yōu)先級(jí)遵循算術(shù)運(yùn)算的優(yōu)先級(jí),即先乘除,再加減。如果需要改變優(yōu)先級(jí),可以使用圓括號(hào)標(biāo)識(shí)。在算術(shù)運(yùn)算中,圓括號(hào)用于指定運(yùn)算的順序,并在進(jìn)行算術(shù)運(yùn)算時(shí)被視為操作符。例如,在以下命令中,圓括號(hào)用于指定(2+3)*4運(yùn)算的順序:echo$(((2+3)*4))2002其他運(yùn)算方法其他運(yùn)算方法bc是一個(gè)Shell命令,用于執(zhí)行高精度算術(shù)運(yùn)算。它是一種解釋型命令,可以直接在命令行中輸入算術(shù)表達(dá)式并計(jì)算結(jié)果。bc支持很多算術(shù)運(yùn)算,包括加、減、乘、除、模(取余)、冪運(yùn)算、位運(yùn)算等。它還支持函數(shù),包括數(shù)學(xué)函數(shù)(如sine、cosine和sqrt)、字符串函數(shù)(如length和index)等。let是一個(gè)Shell命令,用于執(zhí)行算術(shù)運(yùn)算。它允許在命令行中直接輸入表達(dá)式,并將結(jié)果存儲(chǔ)在變量中。expr是一個(gè)Shell命令,用于執(zhí)行算術(shù)運(yùn)算、文本比較和模式匹配。它是一個(gè)簡(jiǎn)單的解釋型命令,可以在命令行中輸入表達(dá)式并計(jì)算輸出結(jié)果。其他運(yùn)算方法bc使用的示例#計(jì)算$2^8$的值$echo"2^8"|bc256#計(jì)算$1+2*3-4/5$的值echo"1+2*3-5/5"|bc6let使用的示例#計(jì)算2+3的值并將結(jié)果存儲(chǔ)在變量x中l(wèi)etx=2+3echo$x5#計(jì)算4-1的值并將結(jié)果存儲(chǔ)在變量y中l(wèi)ety=4-1echo$y3expr使用的示例

#計(jì)算2+3的值expr2+35#計(jì)算4-1的值expr4-13下面分別是bc,let,

e

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論