shell指令碼總結 有段時間沒用shell編程了,開始有些生疏。最近回顧了下,就當筆記吧。如果能夠給有需要的人一點協助,也就心滿意足了,呵呵……不多說了,直入主題。 1.shell 指令碼是區分小寫 www.2cto.com 2.Unix特殊字元有: ( ; $ ? & * () [] ` ‘ “ + 使用其時要進行轉義() 3.Shell的注釋以#開頭 4.函數的定義Function fuction_name(){Command to execute}調用時直接用function_name. 5.控制結構1)If...then語句If [ test_command ]ThenCommandsif2)If...then...else語句If [ test_command ]ThenCommandsElsecommandsif3)If...then...elif...then...(else)語句If [ test_command ]ThenCommandsElif [ test_command ]ThenCommandsElseCommandsFi4)for ... In語句For loop_varible in argument_listDoCommandsdone5)while語句While test_command_is_trueDoCommandsDone6)until 語句Until test_command_is_trueDoCommandsDone7)case語句Case $variable inMatch_1)Commands_for_1;;Match_2)Commands_for_2;;...*) #option for other valuesCommands_for_no_match;;esac6.break、continue、exit和return語句Break跳出整個迴圈體,然後執行迴圈體外接下來的代碼;Continue 結束本次迴圈,繼續下次迴圈;Exit 退出整個指令碼,一般在其後加入一個整數(如exit 0),作為傳回碼發送給系統;Return 用於在函數中返回資料,或返回一個結果給調用函數7.here文檔用於將輸入重新導向到某個互動式shell指令碼或程式,而不需要使用者介入。Program_name << LABLEProgram_input_1Program_input_2..Program_input_#LABLE注意,程式輸入行中的LABLE標記之間是沒有空白的,且輸入的必須是程式所期望的準確資料,否則可能會失效。8.符號命令( ) 在一個子shell中運行括弧所括起來的命令(( )) 在某個shell中對變數進行求值和賦值,並進行數學運算$(( )) 對括起來的運算式進行求值[ ] 與test命令相同[[ ]] 用於字串比較$( ) 命令替換` ` 命令替換9.命令列參數命令列參數$0,$1,$2,...,$9是位置參數,$0指向的是命令本身。命令shift用於位置參數向左移動,如shift命令命令$2成為$1。Shift加入一個數字來移動多個位置,如shift 3使得$4成為$1。shift是一種按照參數列出順序來處理每個位置參數的良好方式。10.特殊參數$* 指定所有的命令列參數,與$@的意義一樣。兩者只有在加雙引號時意義不同,如“$*”將整個參數列表作為一個參數來擷取,”$@”擷取整個參數列表,並將它分隔成不同的參數。$? 檢查傳回碼。一個成功執行完的命令傳回碼為0,不成功是一個非0值。11.雙引號,單引號和 `(esc下面的按鍵)單引號’’對內容進行全引用,也就是說,對變數工命令語句使用文字本文,不進行任何替換;而雙引號則進行部分引用,則允許字元替換或命令替換。`(esc下面的按鍵)用於執行某個命令或指令碼並替換其輸出結果,即命令替換,相同功能有$( )。此外,如果希望每次使用某個變數時重新讀取它的值,也可使用它,如`$PWD`,則每次使用這個變數時都會重新讀取它的新值。 www.2cto.com 12.檔案許可權和粘滯位(suid,sgid)檔案許可權有讀,寫,執行三種許可權。將檔案操作模式設為總是作為某個特定的使用者(suid),或總是作為某個特定的群組成員(sgid)來執行稱為設定粘滯位。可以用命令chmod進行修改檔案許可權。 13.在遠程主機上運行命令Ssh user@hostname command_to_execute如:ssh jack@192.168.1.3 “uptime”14.設定陷阱當某個程式被迫中止時,會有一個退出訊號,這個訊號稱為一個陷阱(trap)。這樣我們可以在捕捉到退出訊號時執行命令,如捕獲到退出訊號1,2,3,15時退出:Trap `echo “nEXITTING on a TRAPPED SINGAL”; exit` 1 2 3 15注意不能捕獲到kill -9.的退出訊號。15.查看使用者資訊Who 提供每個登入使用者的使用者名稱、tty、登入時間及使用者登入地(IP)W 對who的擴充,包括作業進程時間,總使用者進程時間等,但沒有使用者登入地資訊。Last 顯示自wtmp檔案建立開始登入過的使用者名稱單資訊,包括登入時間,退出時間,tty等。 16.ps命令顯示當前系統進程的資訊。17.與使用者通訊Wall,rwall,write,talk18.大小寫文本用tr或typeset命令。VALUES = “AFCDLD”Echo $VALUES | tr ‘[A-Z]’ ‘[a-z]’ #將大寫轉換成小寫;tr ‘[a-z]’ ‘[A-Z]’則小寫轉換成大寫或 www.2cto.com 在VALUES前使用Typeset -l VALUES #將大寫轉換成小寫;typeset -u 則小寫轉換成大寫。19.定時運行指令碼cronCrontab -e進入使用者cron表添加定時指令碼,如在1月15日星期天0:12執行指令碼/usr/bin/test.sh#分(0-59) 時(0-23)日(1-31) 月(1-12) 星期(0-6for Sunday-saturday) 12 0 15 1 0 /usr/bin/test.sh定時任務還可作用at命令。20.輸出控制靜默運行,即不輸出任何內容到螢幕上: 2>&1 > /dev/null輸出到系統指定的控制台: > /dev/console21.解析命令列參數getoptsGetopts optionstring VARIABLEOptionstring 是所需的各種參數,用冒號隔開,如果不需要參數,則冒號可以省略。如果optionstring前有一個冒號,則任何未匹配到時會在VARIBLE中載入一個?號使用getopts的作用是解析出參數,然後作用此參數做不同的操作。如:While getopts :s:m:h:d:p: TMDo Case $TM in S)Do something;;M)Do something;;...?)Exit 1;;Esac22.逐行處理檔案While read LINEDoEcho “$LINE”Done <$FILENAME23.作用select命令建立菜單Select menu in Yes No QuitDoCase $menu inYes)Do something;;No)Do something;;Quit)Break;;*)Do something;;Esacdone