linux+shell腳本語言基礎(chǔ)知識_第1頁
linux+shell腳本語言基礎(chǔ)知識_第2頁
linux+shell腳本語言基礎(chǔ)知識_第3頁
linux+shell腳本語言基礎(chǔ)知識_第4頁
linux+shell腳本語言基礎(chǔ)知識_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、linux shell腳本語言基礎(chǔ)知識一.shell簡介Linux系統(tǒng)的shell作為操作系統(tǒng)的外殼,為用戶提供使用操作系統(tǒng)的界面,更確切的說,shell是用戶及Linux操作系統(tǒng)溝通的橋梁。用戶既可以輸入命令執(zhí)行,又可以利用 Shell腳本編程,完成更加復(fù)雜的操作。shell是一個命令解釋器,它從輸入設(shè)備讀取命令,再將其轉(zhuǎn)為計算機可以了解的指令,然后執(zhí)行它。在linux中,shell又不僅是簡單的命令解釋器,而且是一個全功能的編程環(huán)境。Linux的Shell種類眾多,常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/

2、bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh),等等。不同的Shell語言的語法有所不同,所以不能交換使用。每種Shell都有其特色之處,基本上,掌握其中任何一種就足夠了。通常用Bash,也就是Bourne Again Shell進行編程。二.shell使用1.建立和運行shell程序shell腳本程序:按照一定的語法結(jié)構(gòu)把若干linux命令組織在一起,是這些命令按照我們的要求完成一定的功能。它可以進行類似程序的編寫,并且不需要編譯就能執(zhí)行。(只需修改其權(quán)限)像編寫高級語言的程序一樣,編寫sh

3、ell程序需要一個文本編輯器,如VI和VIM,通常使用VIM文本編輯器,支持更便利的插入模式。首先使用VIM編輯器編輯一個hello.sh文件:#!/bin/bash#hello world exampleecho "hello world"這樣,一個最簡單的shell程序就編寫完了。第一行:#!說明hello.sh這個文件的類型的,這有點類似于Windows系統(tǒng)下的用不同的文件后綴來表示不同的文件類型,但又不完全相同。Linux系統(tǒng)根據(jù)#!及該字符串后面的信息確定該文件的類型。在#!之后是一個路徑名,這個路徑名指定了一個解釋腳本中命令的程序。第二行:“#hello wor

4、ld example”就是shell程序的注釋,(但后面緊接著“!”號的除外)第三行:echo(回顯)語句的功能是把echo后面的字符串輸出到標(biāo)準(zhǔn)輸出中。現(xiàn)在,建立和寫好之后,那么該程序如何運行呢?由于該腳本沒有執(zhí)行的權(quán)限,只需要修改其執(zhí)行的權(quán)限即可,執(zhí)行:chmod a+x hello.sh。然后輸入命令:./hello.sh即可看到效果。2.shell變量變量是一個存儲值的實體,可以是一個名字,或者一個特殊的值。shell可以創(chuàng)建,分配和刪除變量。(1)變量設(shè)置規(guī)則:a.變量及變量內(nèi)容以等號(=)來連接b.等號兩邊不能直接接空格符c.變量名稱只能是英文字母及數(shù)字或下劃線,但是數(shù)字不能是開頭

5、符d.引用變量名用“$變量名”#!/bin/bash#hello world examplea="hello world"echo $a以上例子一樣可以輸出hello world。e.若有空格符可以使用雙引號或單引號將變量內(nèi)容結(jié)合起來,但必須注意,雙引號的特殊字符可以保有變量的特性,但是單引號內(nèi)的特殊字符則僅為一般字符。#name="$LOGNAME is hh" /root is hh#name='$LOGNAME is hh' /$LOGNAME is hhf.通常大寫字符為系統(tǒng)預(yù)設(shè)變量,自行設(shè)定的變量可以使用小寫字符(2)取消變量:

6、用unset 變量名#!/bin/bash#hello world 例子a="hello world"unset aecho $a以上例子將不會打印出任何東西。3.shell特殊變量$0 :執(zhí)行的腳本的文件名$1 :腳本文件的第一個參數(shù)名$# :傳遞到腳本的參數(shù)個數(shù)$* :以一個單字符串顯示所有向腳本傳遞的參數(shù)$ :腳本運行的當(dāng)前進程ID號$? :顯示最后命令的退出狀態(tài),0表示沒有錯誤,其它值表示有錯誤例子a.sh#!/bin/bashecho "the $0"echo "the parameter is $1 $2"echo &qu

7、ot;number of parameter is $#"echo "all parameter is $*"echo $?加權(quán)限后執(zhí)行./a.sh hh mm gg則打印the ./a.shthe parameter is hh mmnumber of parameter is 3all parameter is hh mm gg04.常用shell內(nèi)嵌命令(1)echo:顯示變量內(nèi)容(2)env:顯示目前系統(tǒng)中主要的預(yù)設(shè)變量內(nèi)容(3)set:顯示目前系統(tǒng)中全部的變量內(nèi)容(4)read:從鍵盤讀入變量內(nèi)容(5)declare:聲明變量內(nèi)容-a:定義為數(shù)組 arr

8、ay-f:定義為函數(shù) function-i:定義為整數(shù) integer-r:定義為“只讀”-x:定義為透過環(huán)境輸出變量、例子:#!/bin/basha=1+1declare -i b=1+1echo $aecho $b執(zhí)行后輸出結(jié)果為 1+125.條件測試在寫shell腳本時,經(jīng)常遇到的問題就是判斷字符串是否相等,可能還要檢查文件狀態(tài)或進行數(shù)字測試,只有這些測試完成才能做下一步動作。test命令就是用于測試字符串,文件狀態(tài)和數(shù)字的.test命令兩種格式:test condition或 condition 使用方括號時,要注意在條件兩邊加上空格三.shell腳本編程基礎(chǔ)知識1.shell基本運算

9、符(1)算術(shù)運算符+:對兩個變量做加法。-:對兩個變量做減法。*:對兩個變量做乘法。/:對兩個變量做除法。*:對兩個變量做冪運算。%:取模運算,第一個變量除以第二個變量求余數(shù)。+=:加等于,在自身基礎(chǔ)上加第二個變量。-=:減等于,在第一個變量的基礎(chǔ)上減去第二個變量。*=:乘等于,在第一個變量的基礎(chǔ)上乘以第二個變量。/=:除等于,在第一個變量的基礎(chǔ)上除以第二個變量。%=:取模賦值,第一個變量對第二個變量取模運算,再賦值給第一個變量在使用這些運算符時,需要注意到運算順序的問題。例如輸入下面的命令,輸出1+2的結(jié)果。echo 1+2Shell并沒有輸出結(jié)果3,而是輸出了1+2。在shell中有三種方

10、法可以更改運算順序。a、 用expr改變運算順序。可以用echo expr 1 + 2來輸出1+2的結(jié)果,用expr表 示后面的表達式為一個數(shù)學(xué)運算。需要注意的是,并不是一個單引號,而是“Tab”鍵上面的那個符號。b、用let指示數(shù)學(xué)運算??梢韵葘⑦\算的結(jié)果賦值給變量b,運算命令是b=let 1 + 2。然后用echo $b來輸出b的值。如果沒有l(wèi)et,則會輸出1+2。c、用$表示數(shù)學(xué)運算。將一個數(shù)學(xué)運算寫到$符號的中括號中,中括號中的內(nèi)容將先進行數(shù)學(xué)運算(中括號中可以包含空格)。例如命令echo $1+2,將輸出結(jié)果3。(2)關(guān)系運算符-eq:數(shù)值相等 -ne:數(shù)值不相等 -ge:數(shù)1大于等

11、于數(shù)2-lt:數(shù)1小于數(shù)2 -gt:數(shù)1大于數(shù)2 -le:數(shù)1小于等于數(shù)2輸入test 1 -lt 2 && echo "yes"則打印yes(3)布爾運算-a:(and)兩狀況同時成立!test -r -x file,則file同時具有r和x權(quán)限時,才為true。-o:(or)兩狀況任何一個成立!test -r -x file,則file具有r或x權(quán)限時,就為true。!:相反狀態(tài),test ! -r file,當(dāng)file不具有r權(quán)限時,就為true。(4)字符串運算符=:兩個字符串相等 !=:兩個字符串不相等-z:空串 -n:非空串輸入test &quo

12、t;a" = "a" && echo "yes"則打印yes(5)測試文件狀態(tài)的條件表達式:-e:是否存在 -d:是目錄 -f:是文件-L:符號連接 -s文件非空 -r:可讀-w:可寫 -x:可執(zhí)行2.shell條件語句(1)if.fi語句結(jié)構(gòu)if 條件1;then執(zhí)行程序fi例子:#!/bin/bashdeclare -i a=10declare -i b=20if $a = $b ;thenecho "a is equal to b"fiif $a != $b ;thenecho "a is n

13、ot equal to b"fi輸出結(jié)果為: a is not equal to b(2)if.else.fi語句結(jié)構(gòu)if 條件1;then執(zhí)行程序1else執(zhí)行程序2fi例子:#!/bin/bashdeclare -i aecho "input 1 or 2"read aif $a -eq 1 ;thenecho "1"elseecho "2"fi打印為 input 1 or 211(3)if.elif.else.fi語句結(jié)構(gòu)if 條件1;then執(zhí)行程序1elif條件2;then執(zhí)行程序2else執(zhí)行程序3fi例子:#!

14、/bin/bashdeclare -i a=10declare -i b=20if $a = $b ;thenecho "a is equal to b"elif $a -gt $b ;thenecho "a is greater than b"elseecho "a is less than b"fi輸出結(jié)果為: a is less than b(4)case.esac語句結(jié)構(gòu)case $變量名稱 in“第一個變量內(nèi)容”)程序1“第二個變量內(nèi)容”)程序2其它程序exit 1esac例子:#!/bin/bashecho "y

15、ou like"echo "1 is apple"echo "2 is orange"echo "input your choice"read acase $a in1)echo "you like apple"2)echo "you like orange"echo "you like nothing"exit 1esac執(zhí)行后結(jié)果為:you like1 is apple2 is orangeinput your choice1you like apple3.sh

16、ell循環(huán)類型(1)for循環(huán)循環(huán)操作項目清單。重復(fù)一組命令列表中的每個項目。語法一:for ( 初始值; 限制值; 執(zhí)行步階 )do程序done初始值:變量在循環(huán)中的起始值限制值:當(dāng)變量值在這個限制范圍內(nèi)時,就繼續(xù)進行循環(huán)執(zhí)行步階:每作一次循環(huán)時,變量的變化量例子:#!/bin/bashdeclare -i ss=0for ( i=1; i<=100; i+ )dos=s+idoneecho "the sum is $s"輸出結(jié)果為: the sum is 5050語法二:for var in con1 con2 con3 ./var是一個變量do程序done第一次

17、循環(huán)時,$var的內(nèi)容為con1第二次循環(huán)時,$var的內(nèi)容為con2第三次循環(huán)時,$var的內(nèi)容為con3例子:#!/bin/bashdeclare -a AA=(1 2 3 4 5 6 7 8 9 10)declare -i cfor i in 1 3 5 7 9doc=c+A$i;doneecho "the count is $c"輸出結(jié)果為: the count is 30(2)while循環(huán)while循環(huán),使您能夠重復(fù)執(zhí)行一組命令,直到某些條件發(fā)生。它通常用于當(dāng)你需要反復(fù)操縱的變量值。語法如下:while 條件 do程序done當(dāng)條件成立的時候進入while循環(huán),

18、直到條件不成立時才退出循環(huán)例子:#!/bin/bashdeclare -i a=0while $a -lt 10 doecho $aa=a+1done這將產(chǎn)生以下結(jié)果:0123456789每一次執(zhí)行這個循環(huán),變量a進行檢查,看該值是否小于10。如果a的值小于10,則輸出該值(3)until循環(huán)完美的情況下,你需要執(zhí)行的一組命令某個條件為真時,while循環(huán)執(zhí)行。有時候,你需要執(zhí)行一組命令,直到某個條件為真。語法如下:until 命令do程序done這種方式及while循環(huán)恰恰相反,當(dāng)命令成立的時候退出循環(huán),否則繼續(xù)循環(huán)例子:#!/bin/bashdeclare -i a=0until $a -

19、gt 10 doecho $aa=a+1done這將產(chǎn)生以下結(jié)果:0123456789(4)select循環(huán)語法如下:select var in word1 word2 .do程序done例子:#!/bin/bashecho "what is this?"select i in tea cofee water apple orange nonedocase $i intea|cofee|water)echo "drink"apple|orange)echo "fruit"none)break*) echo "ERROR: I

20、nvalid selection"esacdone打印信息為:what is this?1) tea2) cofee3) water4) apple5) orange6) none#? 1drink#? 6四.shell數(shù)組shell數(shù)組的使用$ a=(123 34 3 5)$ echo $a / 默認獲取第一個元素123$ echo $a1 / 通過下標(biāo)訪問34$ echo $a / 訪問整個數(shù)組 ,或者* 獲取整個數(shù)組123 34 3 5$ echo $#a / 獲取數(shù)組的長度4$ echo $#a3 / 獲取字符串長度1$ echo $a:1:2 / 切片方式獲取一部分數(shù)組內(nèi)容

21、34 3$ echo $a:2 / 從第二個元素開始3 5$ echo $a:2 / 到第二個元素123 34應(yīng)用實例:#!/bin/bashdeclare -a a=(1 2 3 4 5 )for ( i=0; i<=4; i+ )doecho $aidone這將產(chǎn)生以下結(jié)果:12345五:shell函數(shù)使用函數(shù)來執(zhí)行重復(fù)性的任務(wù),是一個很好的方式來創(chuàng)建代碼的重用。代碼重用是現(xiàn)代面向?qū)ο缶幊痰脑瓌t的重要組成部分。1.創(chuàng)建函數(shù):聲明一個函數(shù)語法:function_name () list of commands函數(shù)名 function_name,這就是你將使用它從其他地方在你的腳本調(diào)用。函數(shù)名必須遵循括號內(nèi),后括號內(nèi)的命令的列表。例子:#!/bin/bash# Define your function hereHello () echo "Hello World"# Invoke your functionHello當(dāng)你想執(zhí)行上面的腳本,它會產(chǎn)生以下結(jié)果:Hello World2.參數(shù)傳遞給函數(shù):你可以定義一個函數(shù),它接受參數(shù),而調(diào)用這些函數(shù)。將這些參數(shù)代表$1,$2,依此類推。

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論