Shell變量源-“黃岡杯”一等獎(jiǎng)_第1頁
Shell變量源-“黃岡杯”一等獎(jiǎng)_第2頁
Shell變量源-“黃岡杯”一等獎(jiǎng)_第3頁
Shell變量源-“黃岡杯”一等獎(jiǎng)_第4頁
Shell變量源-“黃岡杯”一等獎(jiǎng)_第5頁
已閱讀5頁,還剩39頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

shell變量shell變量任務(wù)01shell變量2任務(wù)02特殊符號(hào)任務(wù)03shell案例學(xué)習(xí)目標(biāo)認(rèn)識(shí)shell變量學(xué)會(huì)運(yùn)用環(huán)境變量、掌握特殊符號(hào)的應(yīng)用學(xué)會(huì)利用shell變量編寫程序腳本31.Shell變量程序是在內(nèi)存中運(yùn)行的。在程序運(yùn)行過程中,內(nèi)存空間內(nèi)的某些值是變化的。這個(gè)內(nèi)存空間就稱為變量。為了便于操作,可以對(duì)這個(gè)空間進(jìn)行命名,這個(gè)名稱就是變量名。簡(jiǎn)單地說,變量就是用一個(gè)特定的字符串去表示不固定的內(nèi)容,變量的名稱必須是合法的標(biāo)識(shí)符。內(nèi)存空間內(nèi)的值就是變量值,在聲明變量時(shí)可以不賦值,也可以直接賦給初值。變量其實(shí)就是用來放置數(shù)值等內(nèi)容的”盒子”,想要使用這個(gè)可以存放數(shù)值等內(nèi)容的魔法盒,就必須遵循一定的規(guī)則,首先需要提前進(jìn)行如下定義。定義變量的語法格式如下:變量名=變量值;5Shell變量代碼如下:在Shell中,當(dāng)?shù)谝淮问褂媚硞€(gè)變量名時(shí),實(shí)際上就定義了這個(gè)變量。如果沒有給出變量值,則變量會(huì)被賦值為一個(gè)空字符串。varName=varValue;

6Shell變量7定義變量時(shí),變量名不加美元符號(hào)($,PHP語言中變量需要),如:

注意,變量名和等號(hào)之間不能有空格。同時(shí),變量名的命名須遵循如下規(guī)則:首個(gè)字符必須為字母(a-z,A-Z)。中間不能有空格,可以使用下劃線(_)。不能使用標(biāo)點(diǎn)符號(hào)。不能使用bash里的關(guān)鍵字(可用help命令查看保留關(guān)鍵字)。除了顯式地直接賦值,還可以用語句給變量賦值,如:以上語句將/etc下目錄的文件名循環(huán)出來。forfilein`ls/etc`your_name=""Shell變量8使用一個(gè)定義過的變量,只要在變量名前面加美元符號(hào)即可,如:

變量名外面的花括號(hào)是可選的,加不加都行,加花括號(hào)是為了幫助解釋器識(shí)別變量的邊界,比如下面這種情況:

如果不給skill變量加花括號(hào),寫成echo"Iamgoodat$skillScript",解釋器就會(huì)把$skillScript當(dāng)成一個(gè)變量

forskillinAdaCoffeActionJava;doecho"Iamgoodat${skill}Script"doneyour_name="qinjx"echo$your_nameecho${your_name}Shell變量9已定義的變量,可以被重新定義,如:這樣寫是合法的,但注意,第二次賦值的時(shí)候不能寫$your_name="alibaba",使用變量的時(shí)候才加美元符($)。your_name="tom"echo$your_nameyour_name="alibaba"echo$your_nameShell變量10以下實(shí)例從字符串第2個(gè)字符開始截取4個(gè)字符:

your_name="qinjx"greeting="hello,"$your_name”!"greeting_1="hello,${your_name}!"echo$greeting$greeting_1(1)拼接字符串(2)提取子字符串string="wikiisagreatsite"echo${string:1:4}#輸出wikstring="wikiisagreatcompany"echo`exprindex"$string"is`#輸出2(3)查找子字符串查找字符"i或s"的位置:注意:以上腳本中"`"是反引號(hào),而不是單引號(hào)"'",不要看錯(cuò)了哦。Shell變量11

使用readonly命令可以將變量定義為只讀變量,只讀變量的值不能被改變。#!/bin/bashmyUrl="http://www.w3cschool.cc"readonly

myUrlmyUrl=""/bin/sh:NAME:Thisvariableisreadonly.運(yùn)行腳本,結(jié)果如下:Shell實(shí)例:readonly_test.sh下面的例子嘗試更改只讀變量,結(jié)果報(bào)錯(cuò):Shell變量12使用unset命令可以刪除變量。語法:#!/bin/shmyUrl=""unsetmyUrlecho$myUrlunsetvariable_nameShell實(shí)例:remove_var.sh以上實(shí)例執(zhí)行將沒有任何輸出。變量被刪除后不能再次使用。unset命令不能刪除只讀變量。Shell變量局部變量在腳本或命令中定義,僅在當(dāng)前Shell實(shí)例中有效,其他Shell啟動(dòng)的程序不能訪問局部變量。所有的程序,包括Shell啟動(dòng)的程序,都能訪問環(huán)境變量,有些程序需要環(huán)境變量來保證其正常運(yùn)行。必要的時(shí)候Shell腳本也可以定義環(huán)境變量。

Shell變量是由Shell程序設(shè)置的特殊變量。Shell變量中有一部分是環(huán)境變量,有一部分是局部變量,這些變量保證了Shell的正常運(yùn)行13

變量是任何一種編程語言必不可少的組成部分,用于存放各類數(shù)據(jù)。運(yùn)行Shell時(shí),會(huì)同時(shí)存在三種變量:1)局部變量3)Shell變量2)環(huán)境變量Shell變量1自定義變量2環(huán)境變量3位置變量4預(yù)定義變量Shell變量的類型4Shell變量的類型Shell變量分為四類,分別為自定義變量、環(huán)境變量、位置變量和預(yù)定義變量。根據(jù)工作要求臨時(shí)定義的變量稱為自定義變量;環(huán)境變量一般是指用export內(nèi)置命令導(dǎo)出的變量,用于定義Shell的運(yùn)行環(huán)境,保證Shell命令的正確執(zhí)行,如$0、$1、$#;從命令行、函數(shù)或腳本執(zhí)行等處傳遞參數(shù)時(shí),$0、$1稱為特殊位置變量;預(yù)定義變量是在bash(Linux系統(tǒng)的默認(rèn)Shell)中已有的變量,可以直接使用,如$@、$*等。15Shell變量的類型自定義變量自定義變量可以理解為局部變量或普通變量,只能在創(chuàng)建它們的Shell函數(shù)或Shell腳本中使用,自定義變量的說明如表所示。自定義變量在Shell腳本中的使用。以上是ping通主機(jī)的腳本,使用自定義變量方式定義ip=,ping的結(jié)果放在/dev/null(稱垃圾箱)。16Shell變量的類型環(huán)境變量環(huán)境變量也可稱為全局變量,可以在創(chuàng)建它們的Shell及其派生出來的任意子進(jìn)程Shell中使用。環(huán)境變量的說明如表所示。系統(tǒng)中環(huán)境變量的配置文件有/etc/profile、~/.baserc和~/.bash_profile。其中/etc/profile這是系統(tǒng)最主要的Shell設(shè)置文件,也是用戶登陸時(shí)系統(tǒng)最先檢查的文件,有關(guān)重要的環(huán)境變量都定義在此,其中包括PATH、USER、LOGNAME、MAIL等。而在文件的最后,它會(huì)檢查并執(zhí)行/etc/profile.d/*.sh的腳本。17Linux是一個(gè)多用戶的操作系統(tǒng)。通常每個(gè)用戶默認(rèn)的環(huán)境都是相同的,這個(gè)默認(rèn)環(huán)境實(shí)際上就是一組環(huán)境變量的定義。用戶可以對(duì)自己的運(yùn)行環(huán)境進(jìn)行定制,其方法就是修改相應(yīng)的系統(tǒng)環(huán)境變量。PATH指定命令的搜索路徑HOME指定用戶的主工作目錄(即用戶登陸到Linux系統(tǒng)中時(shí),默認(rèn)的目錄)HISTSIZE指保存歷史命令記錄的條數(shù)。LOGNAME指當(dāng)前用戶的登錄名。HOSTNAME指主機(jī)的名稱,許多應(yīng)用程序如果要用到主機(jī)名的話,通常是從這個(gè)環(huán)境變量中來取得的。SHELL指當(dāng)前用戶用的是哪種Shell。LANG/LANGUGE和語言相關(guān)的環(huán)境變量,使用多種語言的用戶可以修改此環(huán)境變量。MAIL指當(dāng)前用戶的郵件存放目錄。PS1命令基本提示符,對(duì)于root用戶是#,對(duì)于普通用戶是$。PS2附屬提示符,默認(rèn)是“>”。18Shell變量的類型19

以PATH為例,PATH代替了所有常用命令的絕對(duì)路徑的設(shè)。因?yàn)橛辛薖ATH這個(gè)變量,所以我們運(yùn)行某個(gè)命令時(shí)不再去輸入全局路徑,直接敲命令名即可。使用echo命令顯示變量的值:[root@localhost~]#echo$PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin[root@localhost~]#echo$HOME/root[root@localhost~]#echo$PWD/root[root@localhost~]#echo$LOGNAMERootShell變量的類型20

使用env命令可列出全部系統(tǒng)變量。不過登錄的用戶不一樣這些環(huán)境變量的值也不一樣。如下圖顯示的就是root這個(gè)賬戶的環(huán)境變量了。Shell變量的類型環(huán)境變量配置文件全局配置文件:/etc/profile

用戶配置文件:~/.bash_profile查看環(huán)境變量set命令可以查看所有的Shell變量,其中包括環(huán)境變量[root@localhostroot]#set……SHELL=/bin/bashTERM=xtermUID=0USER=rootconsoletype=ptyShell變量的類型21Shell變量的類型環(huán)境變量環(huán)境變量應(yīng)用案例。上例中,首先自定義JAVA_HOME變量,然后使用export將JAVA_HOMEPATH自定義變量轉(zhuǎn)換為環(huán)境變量寫在PATH中。這樣就可以在其他用戶執(zhí)行JAVA命令或使用JAVA環(huán)境時(shí),系統(tǒng)將自動(dòng)識(shí)別環(huán)境變量。22Shell變量的類型位置變量在Shell中存在一些位置變量。位置變量用于在命令行、函數(shù)或腳本中傳遞參數(shù),其變量名不用自己定義,其作用也是固定的。執(zhí)行腳本時(shí),通過在腳本后面給出具體的參數(shù)(多個(gè)參數(shù)用空格隔開)對(duì)相應(yīng)的位置變量進(jìn)行賦值。$0代表命令本身,$1-$9代表接收的第1~9個(gè)參數(shù),$10以上需要用{}括起來,如${10}代表接收的第10個(gè)參數(shù)。23位置變量位置參數(shù)在腳本中的使用。其中,$1表示腳本傳遞的第一個(gè)參數(shù),$2表示傳遞的第二個(gè)參數(shù)。此例中,給test.sh腳本執(zhí)行權(quán)限并運(yùn)行腳本,把傳入的tianyun參數(shù)賦值給腳本中的$1,把傳入的yangge參數(shù)賦值給腳本中的$2,因此輸出結(jié)果為tianyunyangge。24Shell變量的類型預(yù)定義變量預(yù)定義變量在Shell中可以直接使用,位置變量也是預(yù)定義變量的一種。預(yù)定義變量如表所示。Shell變量的類型25Shell變量的類型預(yù)定義變量預(yù)定義變量$?功能實(shí)戰(zhàn)。執(zhí)行pwd命令,然后用”echo$?”查看執(zhí)行命令的狀態(tài)返回值,返回值為0,表示上一個(gè)命令的執(zhí)行是成功的。262.特殊符號(hào)特殊符號(hào)

在編寫Shell腳本時(shí),會(huì)用到各種各樣的特殊符號(hào),通過這些特殊符號(hào)可以使我們編寫的代碼更加簡(jiǎn)潔和高效。符號(hào)含義=設(shè)定變量$取用變量值或者運(yùn)算值前導(dǎo)符>重定向取代>>

重定向增加<重定向文件內(nèi)容<<鍵盤輸入內(nèi)容|管道符號(hào),管線(pipe),分隔管線命令的界定28特殊符號(hào)符號(hào)含義&重導(dǎo)向文件描述符號(hào),例:&>或者2>&1將標(biāo)準(zhǔn)輸入輸出文件重定向一個(gè)文件中{}將其內(nèi)的命令置于非命名函數(shù)中執(zhí)行或用在變量替換的界定范圍,例:${PATH}:~/bin''單引號(hào),不具有變量置換功能;硬轉(zhuǎn)義,其內(nèi)部所有的shell元字符、通配符都會(huì)被關(guān)掉。*匹配任意多的字符?匹配任意單個(gè)字符""雙引號(hào),具有變量置換(解析)功能``反引號(hào),放置的命令可先執(zhí)行的指令,與$(指令)功能相同2930用法三:參數(shù)擴(kuò)展,在處理字符串和未知變量時(shí),是很有用的。${name:-default}使用一個(gè)默認(rèn)值(一般是空值)來代替那些空的或者沒有賦值的變量name${name:=default}使用指定值來代替空的或者沒有賦值的變量name${name:?message}如果變量為空或者未賦值,那么就會(huì)顯示出錯(cuò)誤信息并中止腳本的執(zhí)行同時(shí)返回退出碼1${#name}給出name的長(zhǎng)度${name%word}從name的尾部開始刪除與word匹配的最小部分,然后返回剩余部分${name%%word}從name的尾部開始刪除與word匹配的最長(zhǎng)部分,然后返回剩余部分${name#word}從name的頭部開始刪除與word匹配的最小部分,然后返回剩余部分${name##word}從name的頭部開始刪除與word匹配的最長(zhǎng)部分,然后返回剩余部分注:name為變量名,word為要匹配的字符串特殊符號(hào)31

在編寫Shell腳本時(shí),會(huì)用到各種各樣的特殊符號(hào),通過這些特殊符號(hào)可以使我們編寫的代碼更加簡(jiǎn)潔和高效。

這條命令相當(dāng)于如下命令的組合:

1、{}大括號(hào):用法一:通配符擴(kuò)展

lsmy_{finger,toe}slsmy_fingers

my_toesmkdir{userA,userB,userC}-{home,bin,data}這種大括號(hào)的組合,常用在字串的組合上,來看個(gè)例子:特殊符號(hào)32

如果你想在某些使用單個(gè)語句的地方(比如在AND或OR列表中)使用多條語句,你可以把它們括在花括號(hào){}中來構(gòu)造一個(gè)語句塊。用法二:可用于語句塊的構(gòu)造,語句之間用回車隔開。{

grep-v“$cdcatnum”$strack_file>$temp_filecat$temp_file>$strack_fileechocat-nfile1}以上大括號(hào)中的四句命令夠成了一個(gè)語句塊。特殊符號(hào)33用法一:允許匹配方括號(hào)中任何一個(gè)單個(gè)字符。2、[]中括號(hào):if["$?"!=0]

rm-r200[1234]#代表刪除2001,2002,2003,2004等目錄的意思[]符號(hào)可理解為指向test命令的一個(gè)軟鏈接,所以其用法可完全參照test。注:在mkdir命令下無效。用法二:用于條件判斷符號(hào)。等價(jià)于iftest"$?"!=0thenecho“Executeserror”特殊符號(hào)34返回當(dāng)前執(zhí)行命令的結(jié)果3、`command`反引號(hào):

`command`與$(command)的含義相同

fdv=`date+%F`echo"Today$fdv"

在倒引號(hào)內(nèi)的

date+%F會(huì)被視為指令,執(zhí)行的結(jié)果會(huì)帶入fdv變數(shù)中。特殊符號(hào)35單引號(hào)字符串的限制:?jiǎn)我?hào)里的任何字符都會(huì)原樣輸出,單引號(hào)字符串中的變量是無效的;單引號(hào)字串中不能出現(xiàn)單引號(hào)(對(duì)單引號(hào)使用轉(zhuǎn)義符后也不行)。雙引號(hào)的優(yōu)點(diǎn):雙引號(hào)里可以有變量雙引號(hào)里可以出現(xiàn)轉(zhuǎn)義字符

4、'string'單引號(hào)和“

string”

雙引號(hào)

特殊符號(hào)36如果想在定義的變量中加入空格,就必須使用單引號(hào)或雙引號(hào),單、雙引號(hào)的區(qū)別在于雙引號(hào)轉(zhuǎn)義特殊字符而單引號(hào)不轉(zhuǎn)義特殊字符。雙引號(hào):$heyyou=home$echo“$heyyou”$home(很明顯,$轉(zhuǎn)義了輸出了heyyou變量的值)單引號(hào):$heyyou=home$echo‘$heyyou'$$heyyou($沒有轉(zhuǎn)義)特殊符號(hào)37$@列出所有的參數(shù),各參數(shù)用空格隔開

$*列出所有的參數(shù),各參數(shù)用環(huán)境變量IFS的第一個(gè)字符隔開5、$((…))語法:對(duì)括號(hào)內(nèi)的表達(dá)式求值6、shell中幾種特殊的參數(shù)變量的引用

$1、$2、$3……${10}、${11}、${12}……:表示腳本傳入的的各個(gè)參數(shù),注意當(dāng)需表示兩位數(shù)以后的參數(shù)時(shí)數(shù)字要用花括號(hào)括起。特殊符號(hào)387、命令列表2)OR列表:statement1||statement2||statement3||…:允許執(zhí)行一系列命令直到有一條命令成功為止,其后所有命令將不再被執(zhí)行。#!/bin/shtouchfile_onerm-ffile_twoif[-ffile_one]&&echo“hello”&&[-ffile_two]&&echo”there”thenecho“inif”elseecho“inelse”fiexit0輸出為:helloinelse1)AND列表:statement1&&statement2&&statement3&&…:只有在前面所有的命令都執(zhí)行成功的情況下才執(zhí)行后一條命令特殊符號(hào)39$:$echo$?$08、:冒號(hào):內(nèi)建空指令,返回值為09、#號(hào):表示符號(hào)后面的是注解文字,不會(huì)被執(zhí)行;

*號(hào):

匹配文件名中的任何字符,包括字符串;?號(hào):匹配文件名中的任何單個(gè)字符。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論