shell腳本介紹課件_第1頁
shell腳本介紹課件_第2頁
shell腳本介紹課件_第3頁
shell腳本介紹課件_第4頁
shell腳本介紹課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課程內(nèi)容

?什么是shell

?基本思路

?變量、條件、判斷和程序控制

?函數(shù)

?調(diào)試

?正則表達(dá)式

SHELLAH

什么是shell

?用戶與linux

?功能強(qiáng)大

?bash

Shell程序的特點(diǎn)

?可快速、簡單地完成編程

?適合于編寫一些執(zhí)行相對(duì)簡單任務(wù)的小工

?易于配置、維護(hù)和可移植

?執(zhí)行效率較低

各種shell

Shell名相關(guān)信息

sh(Bourn源于Unix早期版本的最初shell

csh,tcsh,csh及其變體

zsh

ksh,pdks許多商業(yè)版本Unix的默認(rèn)shel

h

bash來自GNU項(xiàng)目,是linux的主要shell,它的優(yōu)點(diǎn)是

可以免費(fèi)獲取其源代碼,可移植性很好

管道和重定向

?重定向輸出

-Is-I>out.txt

-Is-I?out.txt

?以下命令可以讓標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出分別

重定向

一pkillsleep>pkillout.txt2>pkillerr.txt

-pkillsleep>pkillout.txt2>&1

一pkillsleep>/dev/null2>&1

?輸入重定向

?管道

將shell做為程序設(shè)計(jì)語言

?交互式程序

$forfilein*

>do

>ifgrep-Istd$file

>then

>more$file

>fi

>done

?腳本程序

通配符可以幫助我們

?*號(hào)可以代表任何字符串,而?號(hào)可以代表任

一一個(gè)字符

?[set]可以表示一個(gè)集合,F(xiàn)set]可以取反

?{}可以代表一種讓你將任何的字符串組放入

集合中

一Isa.{out,txt}-I

?''有特殊功能

-more'grep-Istd*'

-也可以這樣

?more$(grep-Istd*)

創(chuàng)建腳本

?什么是腳本

,一個(gè)腳本的示例

#!/bin/sh

#firstshellprogram

forfilein*

do

ifgrep-Istd$file

then

more$file

fi

腳本及執(zhí)行

?#!緊跟的是執(zhí)行后面文本的程序

?#開始的是注釋

?腳本程序本質(zhì)上被看成shell的標(biāo)準(zhǔn)輸入

?exit命令的作用是保證腳本程序返回一個(gè)有

意義的退出碼

?腳本的擴(kuò)展名或后綴是任意的,一般習(xí)慣

上使用.sh

?讓腳本執(zhí)行

-/bin/shfirst.sh

r=tfr-hn441李二十F7R曰占七立

SHELL基礎(chǔ)語法

變量

-變量并不需要之前事先聲明

?默認(rèn)情況下,所有的變量都當(dāng)做字符串處

理并以字符串存儲(chǔ),即使他們被賦值也是

如此

?在shell中,可以通過$變量名來訪問它的內(nèi)

var=abc

echo$var#abc

res=1+2

echo$res#1+2

引號(hào)的使用

?想要包含空白字符,使用雙引號(hào)

?如果把$包含在雙引號(hào)中,倒做替換

?如果把$包含在單引號(hào)中,不會(huì)發(fā)生替換,

可以用轉(zhuǎn)義符'

var=abc

echo$var

echo"$var”

echo'$var'

echo\$var

環(huán)境變量

環(huán)境變量說明

$HOME當(dāng)前用戶主目錄

$PATH搜索路徑

$PS1命令提示符

$PS2二級(jí)提示符,用來提示后續(xù)輸入,通常為>

$IFS輸入域分隔符,當(dāng)shell讀取輸入時(shí),用來分隔單

詞的一組字符,通常是制表符、空格、換行符

$0Shel腳楓jg霞

$#傳遞給腳本的參數(shù)個(gè)數(shù)

$$Shell腳本的進(jìn)程號(hào),腳本通常用它來生成一個(gè)唯

一的臨時(shí)文件,如/tmp/tmpfile_$$

參數(shù)變量

?如果腳本程序調(diào)用時(shí)帶有參數(shù),一些額外

的變量就會(huì)被創(chuàng)建,即使沒有變量傳入,

.「—工~~4I1,,》『一/->.I、—■—d-2_II仁__t1、4_2L,,.,,1▲、丁

參數(shù)變量說明

$1,$2,$3…腳本程序的參數(shù)

$*在一個(gè)變量中列出所有參數(shù),各參數(shù)之

間用IFS環(huán)境變量中的第一個(gè)字符分隔開,

如果IFS被修改,那么S*的分隔方式也隨

之改變

$?$*的一種變體,它不使用IFS環(huán)境變量

條件

?test或[]

-布爾判斷命令

test-ffile

[-ffile]

r口人人dLJ、Iu~i~r、,-■/

字符串比較結(jié)果

stringl=string2相同為真

stringl!=string2不同為真

-nstring不為空為真

-zstring如果為null則為真

算術(shù)比較結(jié)果

expri-eqexpr2兩個(gè)表達(dá)式相等結(jié)果為真

expri-neexpr2兩個(gè)表達(dá)式不等結(jié)果為真

expri-gtexpr2如果1大于2結(jié)果為真

expri-geexpr2如果1大于等于2結(jié)果為真

expri-Itexpr2如果1小于2結(jié)果為真

axnrl—心axor2力口黑1干藻干,幺吉果為直

文件測(cè)結(jié)果

-dfile如果是目錄則為真

-efile如果文件存在則結(jié)果為真,可能不能移植,盡量

使用-f

-ffile文件是普通文件則為真

-rfile文件可讀為真

-sfile文件大小不為0為真

控制結(jié)構(gòu)-if

?if語句

ifcondition

then

statements

else

statements

fi

?elif語句

?給變量加上引號(hào)

-當(dāng)變量沒值時(shí)也可以確保一個(gè)合法的測(cè)試

控制結(jié)構(gòu)-for

?for語句

forvarinvalues

do

statements

done

-簡單的for示例

forfooinabcdef123

do

echo$foo

done

一停用小八

while循環(huán)

?for特別適合于對(duì)一系列字符串進(jìn)行處理,

而while適合于處理不知道執(zhí)行次數(shù)的情況

whileconditiondo

statements

done

?示例,一個(gè)簡單的密碼驗(yàn)證程序

echoTnterpassword:,5

readpass;

while["$pass"!="abc123”];do

echoTrror,tryagain55

until語句

?語法:

untilconditionn

do

statements

done

?與while相似,只是條件反過來了

untilwho|grep"$1”>/dev/null

do

sleep60

done

case語句

?語法

casevarin

pattern[|pattern]...)statements;;

pattern[|pattern]...)statements;;

esac

?注意,每個(gè)模式行用雙分號(hào)(;;)結(jié)束

caseu$var,5in

yes)echoyes;;

no)echono;;

*)echodefault;

case語句

?case只匹配一個(gè)分支,即使其他的分支也

成上

caseu$var,Jin

yes|y|Yes|YES)echoOK;;

n*|N*)echoNo;;

*)echoother

esac

case"$vadin

命令列表

?and歹U表

一statementl&&statememt2&&statememt3

&&

if[-ffilea]&&echo“hello"&&[-ffileb]&&

other

then

echo“inif”

else

echo“inelse55

fi

~rrtI-hr

語句塊

?如果想在某些只允許使用單個(gè)語句的地方

使用多條語句,可以把他們括在{}中來構(gòu)造

一個(gè)語句塊

get_confirm&&{

grep-v"stcT$file>$otherfile

cat$otherfile

echo

add

)

函數(shù)

函數(shù)

?可以在shell中定義函數(shù),如果寫的shell程

序是大型的,函數(shù)是一種很好的選擇

?在shell中定義函數(shù),只需一個(gè)名字,一對(duì)

括號(hào)和函數(shù)體

function_name(){

statements

)

一個(gè)簡單的函數(shù)

foo(){

echo“functionfoo”

)

echo“startscripf

foo

echo“endscripf

?有函數(shù)的腳本程序依然是從頂向下執(zhí)行的

?必需有調(diào)用一個(gè)函數(shù)之前先定義,不存在

函數(shù)向前聲明的概念

?當(dāng)一個(gè)函數(shù)被執(zhí)行時(shí),腳本程序的位置參

調(diào)用函數(shù)

?可以用return命令讓函數(shù)返回?cái)?shù)字值

?并可以用$?獲取返回碼

?讓函數(shù)返回字符串的常用方法是在函數(shù)中

將返回值保存到變量中

?此外,還可以echo一個(gè)字符串,捕獲其結(jié)

果,如

foo(){echoABC;}

■■■

result="$(foo)”

?可以他用IccR關(guān)鍵字在shall雨豹中聲明局

命令

命令

■內(nèi)部命令和外部命令

?內(nèi)部命令是由shell實(shí)現(xiàn)的,它不能做為外

部程序被調(diào)用,效率較高

?大多數(shù)內(nèi)部命令同時(shí)提供獨(dú)立運(yùn)行的程序

版本,這是PISOX規(guī)范所要求的

命令

?break命令

-用于跳出for,whileuntil循環(huán)

?:命令

-空命令

-有時(shí)會(huì)被用于簡化條件邏輯,相當(dāng)于true

-while:被當(dāng)作無限循環(huán)

-$(var:=value)以防止shell把var當(dāng)作一個(gè)命令

?continue

-使for,while,untile跳到下一次循環(huán)

source和點(diǎn)(.)

?.命令

一點(diǎn)(.)用于在當(dāng)前shell中執(zhí)行命令

-通常,當(dāng)腳本執(zhí)行外部命令或腳本時(shí),會(huì)創(chuàng)建

新的環(huán)境(子shell),但,可以讓我們?cè)诋?dāng)前環(huán)境

下執(zhí)行命令

-可以使用,讓當(dāng)前shell的環(huán)境設(shè)置改變

?source

一同.命令

echo

?輸出結(jié)尾帶有換行的字符串

?如何去掉換行符

-Linux常用的解決方法:

?echo-n“stringtooutpuf

—還有:

?echo-e"stringtooutput'c"

?\c表示去掉換行符

-為了更好的移植性時(shí),可考慮使用printf

eval命令

,允許對(duì)參數(shù)求值,shell的內(nèi)置命令

foo=10

x=foo

y=$$x

echo$y

以上代碼結(jié)果為$句0

foo=10

x=foo

evaly=$$x

echo$y

exitn命令

?使用腳本程序以退出碼n結(jié)束運(yùn)行

?如果沒有指定一個(gè)腳本的退出碼,那最后

一條命令的狀態(tài)將被用作返回值

己Jc11r~l~f二曰LLImCT4"I是可

以退出碼說明

義留含

126文件不可執(zhí)行

127命令未找到

128及以上出現(xiàn)一個(gè)信號(hào)

export命令

?將做為它參數(shù)的變量導(dǎo)出到子shell中有效。

默認(rèn)情況下,一個(gè)shell中創(chuàng)建的變量在子

shell中是不可用的。

?一旦一個(gè)變量被導(dǎo)出,它就可以被該shell

調(diào)用的任何腳本使用,也可以被后續(xù)依次

調(diào)用的任何shell使用

expr命令

?將參數(shù)當(dāng)作表達(dá)來求值

-x=Aexpr&x+T

表達(dá)式示值說明

?€expri|expr2如果expr非零,則等于expri,否則

等于expr2

expri&expr2只要有一個(gè)為零,則為零,否則等

于expri

expri=expr2

expri>expr2

expri>=expr2

expri+expr2

printf

?語法

-printfuformartstring55parameterl

parameter2...

?新版的shell支持這個(gè)命令

?功能和c語言的函數(shù)printf相似

?不支持浮點(diǎn)數(shù)輸出

printf"%s\n"hello

printfu%s%d\t%s”“HiThere”15people

set命令

?為shell設(shè)置參數(shù)變量

setabcdef123

echo$1

echo$2

echo$3

set$(date)

echo$2

shift

?把所有參數(shù)變量左移一個(gè)位置,使$2變成

$1,$3變成$2,以此類推。原來$1的值會(huì)被

丟棄,$0保持不變

?shift可以指定一次左移的個(gè)數(shù)

?左移時(shí),$*,$@,$#會(huì)隨之改變

while[“$1"!=""];do

echo"$1”

shift

done

trap命令

?指定當(dāng)接收到信號(hào)后將要采取的行動(dòng)

?trap有兩個(gè)參數(shù):

-trapcommandsignal

-第一個(gè)參數(shù)是接收到信號(hào)所采取的行動(dòng),第二

個(gè)是什么信號(hào)

-如果command為則會(huì)重置信號(hào)處理方式為默

認(rèn)

-如果command為",則會(huì)忽略某個(gè)信號(hào)

trapINT

unset

?從環(huán)境中刪除變量和函數(shù)

foo="Hello”

echo$foo

unsetfoo

echo$foo

作用和foo二差不多,但不同

find命令

?find[path][options][tests][actions]

?工

-depth在查看目錄本身之前先搜索目錄的

內(nèi)容

-follow跟隨符號(hào)鏈接

-maxdepthsN最多搜索N層目錄

-mount(或-xdev)不搜索其他文件系統(tǒng)

find命令

測(cè)試含義

-atimeN文件在N天之前被最后訪問過

-mtimeN文件在N天之前被最后修改過

-name文件名匹配提供的模式

pattern

-newer文件比otherfile要新

otherfile

-typec文件的類型為c,c是特殊類型,d為目錄

f為普通文件

-user文件擁有者是指定用戶

username

find命令

.?口八,心大

操作符,短格操作符,長格式含義

!-not測(cè)試取反

-a-and兩個(gè)測(cè)試都必需為

-o-or兩個(gè)測(cè)試有一個(gè)必

需為真

?可以用圓括號(hào)改變測(cè)試的優(yōu)先級(jí),不過為

了不讓shell處理圓括號(hào),需要進(jìn)行轉(zhuǎn)義

find命令

動(dòng)作含義

-execcommand執(zhí)行一條命令,必需以\;結(jié)束

-okcommand與-exec類似,但在執(zhí)行命令之前對(duì)

每個(gè)要處理的文件提示用戶確認(rèn),必

需以\;結(jié)束

-print默認(rèn)動(dòng)作,打印文件名

-Is對(duì)當(dāng)前文件使用命令ls-dils

find.-newerfile2-typef-execIs-I{}\;

grep命令

?GeneralRegularExpressionParse

-通用正則表達(dá)式解析器

一語法:greap[options]PATTERN[FILES]

-LLT中、、,九十-彳日人A、匹Ji:匕=fc二,一、/A也人、

選項(xiàng)含義

-C輸出匹配行的數(shù)目

-E啟用擴(kuò)展表達(dá)式

-h取消每個(gè)輸出行的普通前綴

4只列出包含匹配的文件名

-V模式取反

正則表達(dá)式

Lrrh1日人n~r~A/rtzfa

特殊字符含義

A行首

$行尾

,任意單個(gè)字符

[]一個(gè)范圍內(nèi)的字符,或加八表示不在一個(gè)

范圍內(nèi)的字符

正則表達(dá)式

匹配模式含義

[:alnum:]字母與數(shù)字字符

[:alpha:]

[:ascii:]ASCH字符

[:blank:]空格或制表符

[:cntrk]ASCII控制字符

[:digit:]

[:graph:]非控制、非空格

[:lower:]小寫字母

[:print:]可打印字符

[:punct:]標(biāo)點(diǎn)符號(hào)字符

[:space:]空白字符

■??r\r\cir?

正則表達(dá)式

選項(xiàng)

溫馨提示

  • 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)論