已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Bash腳本編程基礎(chǔ),,課程目標(biāo),掌握Bash的類型與配置 掌握Bash基本語法 掌握監(jiān)控程序的編寫 掌握Bash結(jié)構(gòu)化編程,內(nèi)容導(dǎo)航,Bash基礎(chǔ) Bash語法 監(jiān)控實例,Bash基礎(chǔ),Shell與Bash、sh Bash的類型 Bash命令的解釋過程 Bash與Vim配置,Shell,偽終端,SHELL 循環(huán)接收 用戶輸入 解釋執(zhí)行,OS,硬盤 I/O,網(wǎng)絡(luò) I/O,其它操作,用戶側(cè),主機(jī)側(cè),控制臺,用戶,Term,Kernel,Bash的類型,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, chsh,Interactive Bash,什么是交互式Bash 啟動交互式Bash時,Bash做了什么,/etc/bash.bashrc /.bashrc,source,為了統(tǒng)一管理,在login 的時候自動執(zhí)行 /.bashrc,test -r $HOME/.bashrc & source $HOME/.bashrc 更詳細(xì)資料見 man bash: INVOCATION,Bash腳本,常見問題: #! /bin/bash 的位置 來自windows的CRLF的換行符 腳本的權(quán)限位 Bash的退出碼,Bash腳本的執(zhí)行,父shell Fork一sub-shell Sub-shell繼承父shell環(huán)境 Sub-shell調(diào)用指定的解釋器解釋執(zhí)行該腳本 Sub-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 samli var=samli,將帶$的變量名擴(kuò)展成變量值 var=”xzy” echo $var,整數(shù)算術(shù)運算 ( i+ ) ( 10 = 5 ) ( sum = i + j ) Sum=$( I + j ),echo 110 mkdir /data1,2,3,4 a=/a/b/c echo $a%/* $a#*/,變量值按空白符、換行拆分, 如 var=”a b c” for v in $var; do echo $v done,取得命令的輸出: Today=$( date +%F ) Line=$( grep xxx yyy ),通配符擴(kuò)展成文件名 rm *.bak ls ?.bak iso=$( ls xXpP.iso ) hdd=$( ls /dev/sda1-9*),Bash命令的解析過程,Bash腳本與Vim配置,/etc/vimrc 或 /.vimrc中配置,syntax on “ 語法高亮 set number “ 顯示行數(shù) set shiftwidth=4 “ 四格縮進(jìn) set tabstop=4 “ 四格縮進(jìn) set expandtab “ tab轉(zhuǎn)space set bg=light “ 背景為亮色 color murphy “ 配色方案,內(nèi)容導(dǎo)航,Bash基礎(chǔ) Bash語法 監(jiān)控實例,變量 數(shù)值運算 流程控制 函數(shù),Bash語法,變量,變量定義: name=value 變量引用: $name 注意: =號兩邊不允許空格 $name是$name的簡寫,變量,命令替換, command $( command ) # 推薦,例 files=$( ls *.bak ) today=$( date +%F ) lines=$( cat file ),常用變量,$? 上個命令的退出狀態(tài) $! 最后一個后臺進(jìn)程的pid $0 當(dāng)前腳本的名字 $ 當(dāng)前腳本的pid $n n為1,2.n, 腳本或函數(shù)的參數(shù) $ 腳本或函數(shù)的所有參數(shù) $# 腳本或函數(shù)的參數(shù)個數(shù),$UID 當(dāng)前用戶的uid $LOGNAME 當(dāng)前用戶名 $HOSTNAME 主機(jī)名 $RANDOM 1-32767間的隨機(jī)數(shù) $SECONDS 已經(jīng)消耗的秒數(shù) $PWD 當(dāng)前的工作目錄 $OLDPWD 最后一次cd前的工作目錄 $HISTTIMEFORMAT ?,環(huán)境變量,環(huán)境變量是Bash或用戶預(yù)設(shè)置的變量,可被繼承并直接使用 有些環(huán)境變量會影響shell的行為,$PATH 命令搜索路徑名 $LANG locale $LC_ALL locale $TERM 終端類型,一般為xterm $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ù)值運算,運算工具 let, expr ( ) bc 常用運算 + - * / % (加,減,乘,除,取模) 更詳細(xì)內(nèi)容:man bash: ARITHMETIC EVALUATION,i=10; j=20; ( i+ ) ( cnt = i + j ) cnt=$( i + j ),管道與here doc,bc支持浮點數(shù)運算 但bc是交互式的, 怎么辦?,bc EOF # EOF稱為占位符 scale = 3 # 輸入的內(nèi)容 10 / 3 EOF,echo “scale = 3; 10 / 3“ | bc,流程控制,條件判斷 if case 循環(huán) for, while break, continue,if . then,if . 語句用于判斷一個/一組命令是執(zhí)行否成功 表達(dá)式,測試字符串,文件 ( ) 表達(dá)式,測試數(shù)值計算結(jié)果 bash命令,測試命令是否執(zhí)行成功 命令的退出碼( $? )為0時,代表true,字符串測試,文件測試,更詳細(xì)內(nèi)容 man bash CONDITIONAL EXPRESSIONS,if . else .,if expression; then elif expression; then else fi,判斷OS if -f /etc/SuSE-release ; then echo SUSE OS elif -f /etc/slackware-version ; then echo Slackware OS else echo “Redhat ?” fi,命令的退出狀態(tài),檢查 $? 的值是否為0, 0為真,非0為假,grep -wq admin /etc/passwd if ( $? = 0 ); then echo “found” else echo “not found” fi,if grep -wq admin /etc/passwd then echo “found” else echo “not found” fi,case,# 語法 case $var in condition1) Statments1 ; condition2) statments2 ; *) default statments ; esac,read answer case $answer in yes) echo yes ; no) echo no ; *) echo unknown ; esac,case中的字符匹配,* 匹配零個或多個任意字符 ? 匹配一個任意字符 字符組,可以匹配組中的一個字符 | A|B, A或者B,case中的字符匹配,case $answer in YyEeSs) echo “Answer is yes“ ; NnOo) echo “Answer is no“ ; *) echo unknown ; esac,case $answer in yes|y) echo “Answer is yes“ ; no|n) echo “Answer is no“ ; *) echo unknown ; esac,while循環(huán),形式1 while expression; do statments done 形式2 until expression; do statements done,#example i=1 sum=0 while ( i = 100 ); do ( sum += i ) ( i+ ) done echo sum: $sum,統(tǒng)計行數(shù),for循環(huán),for $var in var1 var2 . do statments done break 中斷循環(huán) continue 繼續(xù)循環(huán),# example for file in $( ls -d /data* ) do if -h $file ; then echo “symlink $file” fi done,for循環(huán),# example for QB in $( get_QB ); do buy “$QB” “狗糧” done,# example for QB in $( get_QB ); do buy “$QB” “狗糧” done # 判斷 for 是否輪空 if -z $QB ; then send_sms “您的QB不足.” exit 1 fi,重定向,一個進(jìn)程運行時,內(nèi)核為其準(zhǔn)備三個默認(rèn)文件句柄 STDIN (0), STDOUT(1), STDERR (2),echo xxx file echo xxx 1 file read line log.err some_com /dev/null 2&1 some_com & /dev/null,塊重定向-1,if $error ; then echo “error: $error” “$log” else echo “ok” “$log” fi,if $error ; then echo “error: $error” else echo “ok” fi “$log”,#! /bin/bash file=$0 cnt=0 while read; do ( cnt + ) echo -e “$cnt:t$REPLY“ done $file.log,塊重定向-2,echo message 1 “$log” echo message 2 “$log” echo message 3 “$log”, echo message 1 echo message 2 echo message 3 “$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ù),# define func_name() local可指定局部變量,# example add() local sum ( sum = $1 + $2 ) echo $sum cnt=$( add 10 20 ),判斷OS,# V1 is_suseos() if -f /etc/SuSE-release then return 0 else return 1 fi ,# V2 is_suseos() -f /etc/SuSE-release 最后一個命令的$?,# 調(diào)用 if is_suseos; then echo “SUSE OS” else echo “Slackware ?” fi,關(guān)于函數(shù)的建議,函數(shù)名要具可讀性,從名字即能看出功能 函數(shù)盡量精練,只完成單一功能 盡量使用局部變量 ( local val ) 盡量在$?中返回失敗/成功 調(diào)用函數(shù)時要檢查成功與否 一般不需要編寫main(),內(nèi)容導(dǎo)航,Bash基礎(chǔ) Bash語法 監(jiān)控實例 ,監(jiān)控實例,進(jìn)程監(jiān)控 crontab調(diào)度 獨立運行,周期性檢查 例: cron_mon.sh, 一個腳本的成長過程,關(guān)于腳本的建議
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國土壤修復(fù)行業(yè)十三五規(guī)劃及發(fā)展前景展望報告
- 2024全新服務(wù)員工作時長與休息休假合同范本下載3篇
- 2024年版高級管理人員勞動合同書
- 2024年環(huán)保責(zé)任:無鹵物料環(huán)保承諾協(xié)議書3篇
- 眉山藥科職業(yè)學(xué)院《python與數(shù)據(jù)處理基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 馬鞍山職業(yè)技術(shù)學(xué)院《數(shù)字音視頻制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年度異地離婚手續(xù)下載及婚姻法律咨詢與服務(wù)合同3篇
- 2024年版水電安裝工程承包合同版B版
- 2024年智慧醫(yī)療信息化軟件委托開發(fā)合同范本2篇
- 2025年南通貨運從業(yè)資格證網(wǎng)上考試答案
- 魔術(shù)表演娛樂行業(yè)研究報告
- 2024風(fēng)電光伏組合箱變技術(shù)規(guī)范
- JT∕T 795-2023 事故汽車修復(fù)技術(shù)規(guī)范
- 趣識古文字智慧樹知到期末考試答案章節(jié)答案2024年吉林師范大學(xué)
- 幼兒園健康領(lǐng)域《臉上的表情》課件
- 二年級乘除法口算題計算練習(xí)大全2000題(可直接打印)
- 格蘭氣吸精量播種機(jī)
- 2024年馬原試題及完整答案(歷年真題)
- 天津在津居住情況承諾書
- 舞臺搭建安全管理與風(fēng)險評估
- MOOC 信息安全-復(fù)旦大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論