版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工會(huì)福利招標(biāo)后合同書
- 《多發(fā)傷的救治》課件
- 2025年福州貨運(yùn)從業(yè)資格考試題目和答案大全
- 2025年常州貨運(yùn)資格證500道題庫
- 《復(fù)習(xí)免疫調(diào)節(jié)》課件
- 酒店業(yè)應(yīng)收款項(xiàng)回收策略
- 獨(dú)立辦公室租賃合同
- 商業(yè)中心卷簾門施工合同
- 酒店客戶信息移交辦法
- 釀酒廠食堂外包服務(wù)評(píng)估
- 電氣自動(dòng)化專業(yè)職業(yè)生涯目標(biāo)規(guī)劃書范例及步驟
- 2024-2025學(xué)年上學(xué)期天津六年級(jí)英語期末模擬卷1
- 餐飲行業(yè)智能點(diǎn)餐與外賣系統(tǒng)開發(fā)方案
- 2024-2025學(xué)年九年級(jí)數(shù)學(xué)上學(xué)期期末考試卷
- 水利工程特點(diǎn)、重點(diǎn)、難點(diǎn)及應(yīng)對(duì)措施
- 物業(yè)經(jīng)理轉(zhuǎn)正述職
- 24秋國家開放大學(xué)《企業(yè)信息管理》形考任務(wù)1-4參考答案
- 2024年共青團(tuán)團(tuán)課培訓(xùn)考試題庫及答案
- 2024年共青團(tuán)入團(tuán)考試測(cè)試題庫及答案
- 工程項(xiàng)目管理-001-國開機(jī)考復(fù)習(xí)資料
- 2022年全國應(yīng)急普法知識(shí)競賽試題庫大全-下(判斷題庫-共4部分-2)
評(píng)論
0/150
提交評(píng)論