第一天下午SHELL新_第1頁
第一天下午SHELL新_第2頁
第一天下午SHELL新_第3頁
第一天下午SHELL新_第4頁
第一天下午SHELL新_第5頁
已閱讀5頁,還剩49頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第四章SHELL主要內容Shell的作用Shell程序的編輯和運行基于Bash的Shell程序設計變量聲明表達式條件判斷控制結構參數訪問Shell的作用shell是用戶和系統內核之間的接口程序shell是命令解釋器在本章中,shell指linux的終端

即解釋用戶命令和shell程序的文字終端硬件shell操作系統圖形界面其它用戶界面用戶3linux下的shell用戶使用shell的設定通過查看/etc/passwd文件可以查看用戶使用的shell類型例子:/etc/passwd部分節選

webalizer:x:67:67:Webalizer:/var/www/usage:/sbin/nologin

xfs:x:43:43:XFontServer:/etc/X11/fs:/sbin/nologin

ntp:x:38:38::/etc/ntp:/sbin/nologin

gdm:x:42:42::/var/gdm:/sbin/nologin

htt:x:100:101:IIIMFHtt:/usr/lib/im:/sbin/nologin

tom:x:500:500:tom:/home/tom:/bin/bash#可見,tom用戶使用的shell為bash4linux下的shelllinux下的shell通過cat/ect/shells命令查看安裝的shellshell及路徑查看shell的命令5shell程序Shell程序的特點及用途:shell程序可以認為是將shell命令按照控制結構組織到一個文本文件中,批量的交給shell去執行不同的shell解釋器使用不同的shell命令語法shell程序解釋執行,不生成可以執行的二進制文件可以幫助用戶完成特定的任務,提高使用、維護系統的效率了解shell程序可以更好的配置和使用linux

6登陸后進入用戶指定的shell(1)修改/etc/passwd文件(2)使用chsh修改登陸后的shell臨時改變正在使用的shell基于bash的shell程序greeting.sh

echo"ProgrammeEnds."12say_hello11echo"ProgrammeStartsHere....."10}9echo"Hello$name"8readname7echo"EnterYourName,Please.:"6{5functionsay_hello()4#aFunction3#aSimpleshellScriptExample2#!/bin/bash1解釋輸出提示,提示程序結束調用函數程序開始的第一條命令,輸出提示信息函數結束輸出讀入用戶的輸入到變量nameecho命令輸出字符串函數開始以functin

開始,定義函數同上以#開始,其后為程序注釋以#!開始,其后為使用的shell8基于bash的shell程序程序編譯和運行過程一般步驟:編輯文件保存文件將文件賦予可以執行的權限運行及排錯常用到的命令:vi,編輯、保存文件ls-l查看文件權限chmod

改變程序執行權限直接鍵入文件名運行文件shell程序的編輯和執行查看權限查看權限,初始狀態無執行(x)權限增加可執行(x)的權限查看權限,已經具備執行(x)權限運行程序程序運行過程輸出shell程序設計一般結構shell類型函數主過程#!/bin/bashfunctionfun1(){}......funciton

funn(){}.................函數定義shell類型主過程變量的聲明和使用變量的聲明和使用變量是弱類型的聲明變量不用聲明類型可以存儲不同類型的內容使用靈活使用時要明確變量的類型大小寫區分變量聲明及賦值格式格式:

變量=值 (注意:等號兩側不能有空格)例如:

a=”hello”

b=9變量的聲明和使用變量的引用格式:

$變量名,或者${變量名}

變量名為一個字符用方式一,變量名多于一個字符建議用第2種方式例子:

a=1

abc="hello"

echo$a

echo${abc}常用的運算符整數的算術運算符+、-、*、/、%;賦值運算符+=、-=、*=、/=、%=位運算符<<、>>、&、|、~、^;位運算賦值運算符<<=、>>=、&=、|=、~=、^=;邏輯運算符:&&,||,!,>,>=,<,<=,?。?,==簡單數學表達式expr命令計算一個表達式的值格式:expr

argExpr3+2例子:計算(2+3)×4的值

1、分步計算,即先計算2+3,再對其和乘4

s=`expr2+3`

expr$s\*4

2、一步完成計算:

expr`expr2+3`\*4

說明:運算符號和參數之間要有空格分開;通配符號(*),在作為乘法運算符時要用\、“”、‘’符號修飾`是ESC鍵下面的符號,不是單引號簡單數學表達式let命令格式:letarg1[arg2......]例子:計算(2+3)×4的值

lets=(2+3)*4說明:與expr命令相比,let命令更簡潔直觀當運算符中有<、>、&、|等符號時,同樣需要用引號(單引號、雙引號)或者斜杠來修飾運算符命令文件Shell程序可以直接從終端上鍵入,如:$who|wc-l也可以先把程序鍵入一個文件,然后由shell執行該文件應用示例:建立文件nu,通過執行該文件完成以上命令的功能要以這種方式執行程序,需要有執行權限,可以利用chmod命令完成:chmod+xnu執行:./nu變量與所有的編程語言一樣,shell也允許把值存在變量中,shell變量名以字母或下劃線字符開始,由字母、數字或下劃線組成要把值存入變量,只要寫出變量名,或緊跟一個=,再加變量值即可例如:variable=valuecount=1可以利用echo命令查看變量值例如:echo$variableechocount環境變量環境變量是一種特殊的變量,其特點為:它們可以由其他程序傳遞給腳本在腳本中被調用的任何程序都將繼承環境變量可以像定義一個變量一樣來設置環境變量,在標記它為環境變量時需要使用“export”命令應用示例:$exportMYENV=1 $echo$MYENV使用“set”命令可以獲取當前上下文中全部的變量

特殊變量bash中存在著一些擁有特殊用途的變量,我們稱這種變量為特殊變量。其中一些變量可以讓用戶初始化,并讓bash按照特殊的方式運行;還有一些變量雖然對bash沒有什么特殊的含義,但是對系統程序很重要。例如:PATH變量是Linux系統中執行命令時所搜索的路徑,它是由系統初始化的。一般它的值為:/bin:/sbin:/usr/bin:/usr/sbin。最常用的是位置變量,用來存儲bash腳本程序名后面的參數。Linux系統中的啟動腳本和關閉腳本使用了大量的參數。其中第一個參數保存在變量1中,可利用$1引用,第二個參數存儲在變量2中,可利用$2引用,以此類推。

bash中的引號在bash編程中,引號的使用十分靈活。不同種類的引號具有不同的含義。bash把單引號、雙引號和反斜杠(\)都用作轉意字符。在這3種符號中,單引號的功能最強。用單引號將一個字符串括起來可以屏蔽其中所有的特殊字符。例如:如希望把$1中的$當作貨幣符號賦給變量tax,應采用如下形式的語句:$

tax=‘$1’bash中的引號(二)Linux雙引號的作用與單引號差不多,區別在于雙引號沒有那么嚴格,單引號忽略所有特殊字符,雙引號只忽略大多數,不忽略以下三種符號:美元符號反引號反斜杠(\)反斜杠一次只能讓單個字符轉義,不能操作整個字符串。它的屏蔽能力與單引號相當。下面的例子中:$string=all\right反斜杠可以讓bash忽略all后的空格,這樣string接收到的將是一個單詞allright。命令替換命令替換是指shell將一個命令的標準輸出插在一個命令行中任何位置的功能,有兩種命令替換方法:反引號`command`$(command)結構應用示例:$echothedateandtimeis:`date`$echoYouareworkingin`pwd`

參數傳遞通過參數傳遞shell程序可以從命令行接收參數,用途更加強大。下面介紹三種與參數傳遞有關的變量位置參數($1、$2…)Shell程序執行時自動把第一個參數放在一個特殊的變量1中,以此類推,2,3…等參數放在變量2、3…中應用示例:編輯ison文件內容如下:who|grep$1執行:$chmod+xison

$./ison

bcshell將用bc代替$1,命令行變為:who|grep

bc

參數傳遞(二)$#變量用于存放命令行中所鍵入的參數個數shell程序測試這個變量確定用戶輸入的參數個數是否正確應用示例:編輯args文件內容如下:echo$#

argumentspassedechoarg1=:$1:arg2=:$2:arg3=:$3:

執行:$argsabc$argsab$args

從這個例子可以看到shell程序將命令行的參數個數傳遞給了$#變量參數傳遞(三)$*變量可以引用傳遞給程序的所有參數經常應用在參數不確定或者參數數目可變的程序中應用示例:編輯args2文件內容如下:echo$#argumentspassedechotheyare$*

執行:$chmod+xargs2 $arg2abc $arg2ab$arg2

shift命令shift命令的作用是把位置參數左移原來在$2中的內容賦給$1,$3中內容賦給$2,依此類推。原來$1中的值就丟失了。$#(參數變量的個數)也自動減1

shift命令(二)編輯shiftdemo程序如下:echo$#$*

shiftecho$#$*shiftecho$#$*

shiftecho$#$*

執行:chmod+xshiftdemo ./shiftabc退出狀態與$?變量 每當程序執行完成后都會給系統返回一個退出狀態。該狀態是個數值,通常指示該命令運行是否成功。退出狀態為0表示運行成功,非零表示運行失敗。Shell自動將最后所執行命令的退出狀態設置到shell變量$?中,可以用echo命令在終端上顯示它的值應用示例:$who|grep

bc

$echo$? $who|grep123$echo$?

判斷條件判斷語句是幾乎所有編程語言中都有的語句,shell中有兩種條件判斷語句:if表達式case表達式

if表達式一般結構

ifconmmand1thenelifcommand2thenelseFi

這個if…then…else表達式中的else和elif是可選部分。其中elif是elseif得縮寫,在if…then…else表達式中這樣的elseif語句可以有多個。其中fi表示if…then…else表達式的結束。Bash支持此類表達式的多層嵌套。 其中command1需要執行并檢測其退出狀態,如果退出狀態為0,則執行其后then與elif之間的語句,同理執行并檢測command2的退出狀態,并根據退出狀態是否為0選擇執行elif與else之間或else與fi之間的語句test命令shell有一條內部命令test,經常用來在if命令中測試一種或幾種條件,其一般格式為:testexpression其中expression表示要測試的條件。test計算expression,若結果為真,其返回的退出狀態為0,若結果為假,返回的退出狀態就不為零應用示例:$name=bc $test“$name”=bc

$echo$?※注意:test把所有操作數($name和bc)和操作符作為單獨的參數分別對待,也就是說它們之間至少要有一個空白字符分隔

test命令(二)test命令的另一種格式shell程序使用test命令非常頻繁,因此產生了另一種公認的命令格式:[expression]“[”實際上就是命令的名字,同時要求在表達式的有一個配對的“]”,在“[“之后和”]”之前都要有空格應用示例:$name=bc $[“$name”=bc]

$echo$?

test命令(三)整數操作符test命令還有一類進行整數比較的操作符,見右表:例如:操作符“-eq”檢測兩個整數是否相等,如果有一個變量名為count,想看看它的值是否為0,則可以寫成:[“$count”–eq0]操作符返回真(退出狀態為0)的條件int1–eqint2int1等于int2int1–geint2

int1大于或等于int2int1–gtint2int1大于int2int1–leint2

int1小于或等于int2int1–ltint2int1小于int2int1–neint2int1不等于int2test命令(四)文件操作符test提供了一類問詢文件狀態的一元操作符,見右表:例如:[-f/etc/fstab]檢測fstab文件是否存在且是否為普通文件

if結構應用示例使用if…then…else結構編寫一個判斷命令行所傳入參數大小的程序將所輸入數值存放在位置參數$1中若$1>100,則輸出:thenumberisgreaterthan100若$1<10,則輸出:thenumberissmallerthan10否則輸出:thenumberisbetween10and100

if表達式應用示例(二)編輯ifdemo程序如下if["$1"-gt100]thenecho"thenumberisgreaterthan100."elif["$1"-lt10]thenecho"thenumberissmallerthan10."elseecho"thenumberisbetween10and100."fi執行$chmod+xifdemo$./ifdemo100…輸入數據測試程序功能

case表達式case表達式類似于C語言中的case語句和switch語句,即從幾種情況中選擇一種執行。一般結構casestringinstring1)…;;string2)…;;*)…;;

esaccase表達式(二)關鍵字是case、in、雙分號和esac。字符串string首先與string1和string2比較,如果匹配就執行它們下面的語句直到雙分號。如果字符串string與列出的字符串都不匹配,則執行*)下面的語句

case表達式(三)應用示例:編寫一個實現中英文數字轉換的程序,編輯casedemo程序如下:if["$#"-ne1]thenecho"usage:./casedemonumber"exit1ficase"$1"in0)echozero;;1)echoone;;2)echotwo;;………………8)echoeight;;9)echonine;;esac

調試程序用的-x選項可以通過鍵入sh–x后跟程序名及其參數跟蹤程序的執行,在這種模式下執行每條命令時都在終端上將命令顯示出來,前面加個加號執行:$sh–xcasedemo1將會在終端上看到:+'['1-ne1']‘+case"$1"in+echooneone

循環shell中提供了可供靈活處理循環的語句,這些循環可以重復執行一組命令,既可以是事先指定的次數,也可以是直到某種條件滿足為止。shell中有三個內部循環命令:forwhile{…}until

for命令for命令用來將一組命令循環執行預先確定的次數基本格式:forvarinword1word2…wordndo command

done應用示例:

$foriin123>do>echo$i>done可以看到終端上依次輸出1、2、3

不帶列表的for命令for命令也可以寫成以下形式:forvardo commanddoneshell也能認出這種少了in的特殊格式,shell會自動將命令行鍵入的所有參數依次組織成列表。應用示例:

編輯fordemo文件內容如下: echoNumberofargumentspassedis$# forargdoecho$argdone執行:$chmod+xfordemo

$./fordemoabc

while命令第二種循環命令是while,格式為:whilecommand1do commanddone先執行command1,并檢測其退出狀態,如果為0則執行do與done之間命令,再次檢測直到command1退出狀態不為0如果第一次執行command1時退出狀態就不為0,那么do和done之間的命令可能根本不執行while命令應用示例(一)編輯whiledemo1程序如下: i=1 while[“$i”-le5] do echo$i i=$((i+1)) done 執行:$chmod+xwhiledemo1

$./whiledemo1將變量i作為計數變量,初值設為1

while命令應用示例(二)while循環通常跟shift命令結合使用,以處理命令行中鍵入的參數個數可變的情況編寫whiledemo2程序如下:

while[“$#”-ne0]do echo“$1” shiftdone執行:$chmod+xwhiledemo2 $./whiledemo2abcshift命令使位置變量向下移($2到$1,$3到$2),并且$#遞減。until命令until命令跟while很像,區別在于只要在until后面的命令退出狀態不為0,循環就一直執行下去,其格式為: untilcommand1 do command done跟while命令一樣,如果第一次執行command1時返回的退出狀態為0,do和done之間的命令可能跟本不會執行。

until命令示例程序編輯untildemo程序如下:if["$#"-ne1]thenecho"Usage:untildemouser"exit1fiuntilwho|grep"$1">/dev/nulldosleep10doneecho"$1hasloggedon"執行:$chmod+xuntildemo $./untildemo

bc $./

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論