




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Bash腳本編程根底xxxxlitencent 課程目的 掌握Bash的類型與配置 掌握Bash根本語法 掌握監(jiān)控程序的編寫 掌握Bash構(gòu)造化編程內(nèi)容導(dǎo)航 Bash根底 Bash語法 監(jiān)控實(shí)例Bash根底 Shell與Bash、sh Bash的類型 Bash命令的解釋過程 Bash與Vim配置Shell偽終端偽終端SHELLSHELL循環(huán)接收循環(huán)接收用戶輸入用戶輸入解釋執(zhí)行解釋執(zhí)行OSOS硬盤 I/O網(wǎng)絡(luò) I/O其它操作用戶側(cè)用戶側(cè)主機(jī)側(cè)主機(jī)側(cè)控制臺控制臺用戶用戶TermTermKernelKernelBash的類型Login BashInteractive BashBash Scripts
2、Login Bash 什么是 Login Bash Login 時 Bash做了什么全局配置 /etc/profile個人配置/.bash_profile/.bash_login/.profile咦, 好似沒提到/etc/profile.d/ ?SUSE: 確保文件可讀SLK: 確保文件可讀可執(zhí)行Login sh login sh和login bash是一樣的嗎?Login sh只讀取:/etc/profile/.profile查看: ps; /etc/passwd指定: useradd -s /bin/bash修改:usermod, chshInteractive Bash 什么是交互式Ba
3、sh 啟動交互式Bash時,Bash做了什么/etc/bash.bashrc/.bashrcsource 為了統(tǒng)一管理,在login 的時候自動執(zhí)行 /.bashrctest -r $HOME/.bashrc & source $HOME/.bashrc更詳細(xì)資料見 man bash: INVOCATIONBash腳本常見問題: #! /bin/bash 的位置 來自windows的CRLF的換行符 腳本的權(quán)限位 Bash的退出碼Bash腳本的執(zhí)行 父shell Fork一sub-shell Sub-shell繼承父shell環(huán)境 Sub-shell調(diào)用指定的解釋器解釋執(zhí)行該腳本 Su
4、b-shell退出, 相關(guān)環(huán)境被銷毀 父shell獲得sub-shell的退出狀態(tài)1、brace expansion花括號擴(kuò)展2、tilde expansion波浪線擴(kuò)展3、parameter,variable expansion變量擴(kuò)展4、arithmetic expansion算術(shù)擴(kuò)展5、command substitution命令交換6、word splitting詞的拆分7、pathname expansion途徑名擴(kuò)展可擴(kuò)展成用戶的$HOME值cd echo samlivar=samli將帶$的變量名擴(kuò)展成變量值var=xzyecho $var整數(shù)算術(shù)運(yùn)算 i+ 10 = 5 sum
5、 = i + j Sum=$ I + j echo 1.10mkdir /data1,2,3,4a=/a/b/cecho $a%/* $a#*/變量值按空白符、換行拆分, 如var=a b cfor v in $var; do echo $vdone獲得命令的輸出:Today=$ date +%F Line=$ grep xxx yyy 通配符擴(kuò)展成文件名rm *.bakls ?.bakiso=$ ls xXpP.iso hdd=$ ls /dev/sda1-9*Bash命令的解析過程Bash腳本與Vim配置 /etc/vimrc 或 /.vimrc中配置syntax on 語法高亮set n
6、umber 顯示行數(shù)set shiftwidth=4 四格縮進(jìn)set tabstop=4 四格縮進(jìn)set expandtab tab轉(zhuǎn)spaceset bg=light 背景為亮色color murphy 配色方案內(nèi)容導(dǎo)航 Bash根底 Bash語法 監(jiān)控實(shí)例 變量 數(shù)值運(yùn)算 流程控制 函數(shù)Bash語法變量 變量定義:name=value 變量引用:$name注意: =號兩邊不允許空格 $name是$name的簡寫變量 命令交換 command $ command # 推薦例files=$ ls *.bak today=$ date +%F lines=$ cat file 常用變量$?上個命
7、令的退出狀態(tài)$!最后一個后臺進(jìn)程的pid$0當(dāng)前腳本的名字$當(dāng)前腳本的pid$nn為1,2.n, 腳本或函數(shù)的參數(shù)$腳本或函數(shù)的所有參數(shù)$#腳本或函數(shù)的參數(shù)個數(shù)$UID當(dāng)前用戶的uid$LOGNAME當(dāng)前用戶名$HOSTNAME主機(jī)名$RANDOM1-32767間的隨機(jī)數(shù)$SECONDS已經(jīng)消耗的秒數(shù)$PWD當(dāng)前的工作目錄$OLDPWD最后一次cd前的工作目錄$HISTTIMEFORMAT ?環(huán)境變量 環(huán)境變量是Bash或用戶預(yù)設(shè)置的變量,可被繼承并直接使用 有些環(huán)境變量會影響shell的行為$PATH命令搜索途徑名$LANGlocale$LC_ALLlocale$TERM終端類型,一般為xt
8、erm$EDITOR系統(tǒng)默認(rèn)編輯器環(huán)境變量的設(shè)置 export name=value; bash foobar.sh name=value ./foobar.sh 更多信息請 man env 更多變量見 man bash: Shell Variables問題在哪設(shè)置JAVA_HOME,讓所有用戶皆可使用按上面的設(shè)置后,rc.local中 執(zhí)行以下命令可否成功 /usr/local/apache-tomcat/bin/start.sh環(huán)境變量要注意的 變量需要export才能被子進(jìn)程看到成為環(huán)境變量 大部分的環(huán)境變量在login時被設(shè)置 要注意locale對程序輸入輸出的影響數(shù)值運(yùn)算 運(yùn)算工具
9、let, expr bc 常用運(yùn)算 + - * / % 加,減,乘,除,取模 更詳細(xì)內(nèi)容:man bash: ARITHMETIC EVALUATIONi=10; j=20; i+ cnt = i + j cnt=$ i + j 管道與here docbc支持浮點(diǎn)數(shù)運(yùn)算但bc是交互式的, 怎么辦?bc EOF# EOF稱為占位符scale = 3# 輸入的內(nèi)容10 / 3EOFecho scale = 3; 10 / 3 | bc流程控制 條件判斷 if case 循環(huán) for, while break, continueif . then if . 語句用于判斷一個/一組命令是執(zhí)行否成功 表
10、達(dá)式,測試字符串,文件 表達(dá)式,測試數(shù)值計(jì)算結(jié)果 bash命令,測試命令是否執(zhí)行成功 命令的退出碼 $? 為0時,代表true字符串測試測試測試意義意義 -n $str $str 不為空值 -z $str $str 為空值 $str1 = $str2 相等 $str1 != $str2 不等文件測試 更詳細(xì)內(nèi)容 man bash CONDITIONAL EXPRESSIONS用法意義用法意義 -b $file 塊設(shè)備 -r $file 文件可讀 -c $file 字符設(shè)備 -s $file 文件大小不為零 -d $file 目錄 -w $file 文件可寫 -e $file 文件存在 -x $
11、file 文件可執(zhí)行 -f $file 普通文件 -p $file 命名管道if . else .if expression; then elif expression; then else fi判斷OSif -f /etc/SuSE-release ; thenecho SUSE OSelif -f /etc/slackware-version ; then echo Slackware OSelseecho “Redhat ?fi命令的退出狀態(tài) 檢查 $? 的值是否為0, 0為真,非0為假grep -wq admin /etc/passwd if $? = 0 ; then echo “f
12、oundelse echo “not foundfiif grep -wq admin /etc/passwdthen echo “foundelse echo “not foundficase# 語法case $var incondition1 Statments1 ;condition2 statments2 ;* default statments;esacread answercase $answer inyesecho yes ;noecho no ;*echo unknown ;esaccase中的字符匹配 * 匹配零個或多個任意字符 ?匹配一個任意字符 字符組,可以匹配組中的一個
13、字符 |A|B, A或者Bcase中的字符匹配case $answer inYyEeSsecho Answer is yes;NnOoecho Answer is no;*echo unknown;esaccase $answer inyes|yecho Answer is yes;no|necho Answer is no;*echo unknown;esacwhile循環(huán)形式1while expression; do statmentsdone 形式2until expression; do statementsdone #examplei=1sum=0while i = 100 ; do
14、 sum += i i+ doneecho sum: $sum統(tǒng)計(jì)行數(shù)#! /bin/bashfile=$0 # 腳本本身Cnt=0# 行數(shù)cat $file | while read; do # 關(guān)鍵 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 會是我們期望的結(jié)果嗎#! /bin/bashfile=$0 # 腳本本身Cnt=0# 行數(shù)cat $file | while read; do # 關(guān)鍵 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 會是我們期望的結(jié)果嗎#! /bin/b
15、ashfile=$0 # 腳本本身Cnt=0# 行數(shù)cat $file | while read; do # 關(guān)鍵 ( cnt + ) echo -e $cnt:t$REPLYdoneecho total:$cnt# 會是我們期望的結(jié)果嗎#! /bin/bashfile=$0cnt=0while read; do ( cnt + ) echo -e $cnt:t$REPLYdone fileecho xxx 1 fileread line log.err some_com /dev/null 2&1 some_com & /dev/null塊重定向-1if $error ; t
16、hen echo “error: $error “$logelse echo “ok “$logfiif $error ; then echo “error: $errorelse echo “okfi “$log#! /bin/bashfile=$0cnt=0while read; do cnt + echo -e $cnt:t$REPLYdone $file.log塊重定向-2 echo message 1 “$log echo message 2 “$log echo message 3 “$log echo message 1 echo message 2 echo message 3
17、 “$log echo message 1 echo message 2 echo message 3 “$log函數(shù) 調(diào)用: 需要先定義后調(diào)用。名字參數(shù) 參數(shù): $1, $2 . $#, $ 返回值: 標(biāo)準(zhǔn)輸出 退出狀態(tài): return $num;或最后一個命令的退出狀態(tài) 注意 函數(shù)必須先定義,后使用函數(shù)# definefunc_name local可指定部分變量# exampleadd local sum sum = $1 + $2 echo $sumcnt=$ add 10 20 判斷OS# V1is_suseos if -f /etc/SuSE-release then return
18、0 else return 1 fi# V2is_suseos -f /etc/SuSE-release 最后一個命令的$?# 調(diào)用if is_suseos; thenecho “SUSE OSelseecho “Slackware ?fi關(guān)于函數(shù)的建議 函數(shù)名要具可讀性,從名字即能看出功能 函數(shù)盡量精練,只完成單一功能 盡量使用部分變量 local val 盡量在$?中返回失敗/成功 調(diào)用函數(shù)時要檢查成功與否 一般不需要編寫main內(nèi)容導(dǎo)航 Bash根底 Bash語法 監(jiān)控實(shí)例監(jiān)控實(shí)例 進(jìn)程監(jiān)控 crontab調(diào)度 獨(dú)立運(yùn)行,周期性檢查 例: cron_mon.sh, 一個腳本的成長過程關(guān)于腳本的建議 代碼應(yīng)分三部分:變量,函
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司新產(chǎn)品下線節(jié)目策劃方案
- 公司效能提升年活動方案
- 公司氣球派對活動方案
- 公司新年開工活動方案
- 公司生日福利活動方案
- 公司組織避暑活動方案
- 公司搬新辦公室活動方案
- 公司節(jié)目展示策劃方案
- 公司活動燒烤策劃方案
- 公司盈利模式策劃方案
- 診所院內(nèi)感染管理制度
- 2025-2030年中國經(jīng)顱磁刺激儀行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
- 2025年江蘇高考?xì)v史真題(解析版)
- 廣西來賓市2023-2024學(xué)年高二下學(xué)期7月期末考試物理試題(含答案)
- 會員月底抽獎活動方案
- 2025年互聯(lián)網(wǎng)醫(yī)療平安好醫(yī)生阿里健康京東健康對比分析報(bào)告
- 攀枝花市仁和區(qū)社會招考社區(qū)工作者考試真題2024
- 2025年上海楊浦區(qū)七下英語期末達(dá)標(biāo)檢測試題含答案
- 老年外科患者圍手術(shù)期營養(yǎng)支持中國專家共識(2024)解讀
- 臨床肘關(guān)節(jié)損傷影像診斷
- 2025家庭裝飾裝修合同范本
評論
0/150
提交評論