《Bash腳本編程基礎》PPT課件.ppt_第1頁
《Bash腳本編程基礎》PPT課件.ppt_第2頁
《Bash腳本編程基礎》PPT課件.ppt_第3頁
《Bash腳本編程基礎》PPT課件.ppt_第4頁
《Bash腳本編程基礎》PPT課件.ppt_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Bash腳本編程基礎,,課程目標,掌握Bash的類型與配置 掌握Bash基本語法 掌握監(jiān)控程序的編寫 掌握Bash結構化編程,內容導航,Bash基礎 Bash語法 監(jiān)控實例,Bash基礎,Shell與Bash、sh Bash的類型 Bash命令的解釋過程 Bash與Vim配置,Shell,偽終端,SHELL 循環(huán)接收 用戶輸入 解釋執(zhí)行,OS,硬盤 I/O,網絡 I/O,其它操作,用戶側,主機側,控制臺,用戶,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,為了統一管理,在login 的時候自動執(zhí)行 /.bashrc,test -r $HOME/.bashrc & source $HOME/.bashrc 更詳細資料見 man bash: INVOCATION,Bash腳本,常見問題: #! /bin/bash 的位置 來自windows的CRLF的換行符 腳本的權限位 Bash的退出碼,Bash腳本的執(zhí)行,父shell Fork一sub-shell Sub-shell繼承父shell環(huán)境 Sub-shell調用指定的解釋器解釋執(zhí)行該腳本 Sub-shell退出, 相關環(huán)境被銷毀 父shell取得sub-shell的退出狀態(tài),1、brace expansion(花括號擴展) 2、tilde expansion(波浪線擴展) 3、parameter,variable expansion(變量擴展) 4、arithmetic expansion(算術擴展) 5、command substitution(命令替換) 6、word splitting(詞的拆分) 7、pathname expansion(路徑名擴展),可擴展成用戶的$HOME值 cd echo samli var=samli,將帶$的變量名擴展成變量值 var=”xzy” echo $var,整數算術運算 ( 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 ),通配符擴展成文件名 rm *.bak ls ?.bak iso=$( ls xXpP.iso ) hdd=$( ls /dev/sda1-9*),Bash命令的解析過程,Bash腳本與Vim配置,/etc/vimrc 或 /.vimrc中配置,syntax on “ 語法高亮 set number “ 顯示行數 set shiftwidth=4 “ 四格縮進 set tabstop=4 “ 四格縮進 set expandtab “ tab轉space set bg=light “ 背景為亮色 color murphy “ 配色方案,內容導航,Bash基礎 Bash語法 監(jiān)控實例,變量 數值運算 流程控制 函數,Bash語法,變量,變量定義: name=value 變量引用: $name 注意: =號兩邊不允許空格 $name是$name的簡寫,變量,命令替換, command $( command ) # 推薦,例 files=$( ls *.bak ) today=$( date +%F ) lines=$( cat file ),常用變量,$? 上個命令的退出狀態(tài) $! 最后一個后臺進程的pid $0 當前腳本的名字 $ 當前腳本的pid $n n為1,2.n, 腳本或函數的參數 $ 腳本或函數的所有參數 $# 腳本或函數的參數個數,$UID 當前用戶的uid $LOGNAME 當前用戶名 $HOSTNAME 主機名 $RANDOM 1-32767間的隨機數 $SECONDS 已經消耗的秒數 $PWD 當前的工作目錄 $OLDPWD 最后一次cd前的工作目錄 $HISTTIMEFORMAT ?,環(huán)境變量,環(huán)境變量是Bash或用戶預設置的變量,可被繼承并直接使用 有些環(huán)境變量會影響shell的行為,$PATH 命令搜索路徑名 $LANG locale $LC_ALL locale $TERM 終端類型,一般為xterm $EDITOR 系統默認編輯器,環(huán)境變量的設置,export name=value; bash foobar.sh name=value ./foobar.sh 更多信息請 man env 更多變量見 man bash: Shell Variables,問題,在哪設置JAVA_HOME,讓所有用戶皆可使用 按上面的設置后,rc.local中 執(zhí)行以下命令可否成功 /usr/local/apache-tomcat/bin/start.sh,環(huán)境變量要注意的,變量需要export才能被子進程看到(成為環(huán)境變量) 大部分的環(huán)境變量在login時被設置 要注意locale對程序輸入輸出的影響,數值運算,運算工具 let, expr ( ) bc 常用運算 + - * / % (加,減,乘,除,取模) 更詳細內容:man bash: ARITHMETIC EVALUATION,i=10; j=20; ( i+ ) ( cnt = i + j ) cnt=$( i + j ),管道與here doc,bc支持浮點數運算 但bc是交互式的, 怎么辦?,bc EOF # EOF稱為占位符 scale = 3 # 輸入的內容 10 / 3 EOF,echo “scale = 3; 10 / 3“ | bc,流程控制,條件判斷 if case 循環(huán) for, while break, continue,if . then,if . 語句用于判斷一個/一組命令是執(zhí)行否成功 表達式,測試字符串,文件 ( ) 表達式,測試數值計算結果 bash命令,測試命令是否執(zhí)行成功 命令的退出碼( $? )為0時,代表true,字符串測試,文件測試,更詳細內容 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,統計行數,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,重定向,一個進程運行時,內核為其準備三個默認文件句柄 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”,函數,調用: 需要先定義后調用。名字參數 參數: $1, $2 . $#, $ 返回值: 標準輸出 退出狀態(tài): return $num;或最后一個命令的退出狀態(tài) 注意 函數必須先定義,后使用,函數,# 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 最后一個命令的$?,# 調用 if is_suseos; then echo “SUSE OS” else echo “Slackware ?” fi,關于函數的建議,函數名要具可讀性,從名字即能看出功能 函數盡量精練,只完成單一功能 盡量使用局部變量 ( local val ) 盡量在$?中返回失敗/成功 調用函數時要檢查成功與否 一般不需要編寫main(),內容導航,Bash基礎 Bash語法 監(jiān)控實例 ,監(jiān)控實例,進程監(jiān)控 crontab調度 獨立運行,周期性檢查 例: cron_mon.sh, 一個腳本的成長過程,關于腳本的建議

溫馨提示

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

評論

0/150

提交評論