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 ]
Then
Commands
if
2)If...then...else語句
If [ test_command ]
Then
Commands
Else
commands
if
3)If...then...elif...then...(else)語句
If [ test_command ]
Then
Commands
Elif [ test_command ]
Then
Commands
Else
Commands
Fi
4)for ... In語句
For loop_varible in argument_list
Do
Commands
done
5)while語句
While test_command_is_true
Do
Commands
Done
6)until 語句
Until test_command_is_true
Do
Commands
Done
7)case語句
Case $variable in
Match_1)
Commands_for_1
;;
Match_2)
Commands_for_2
;;
.
.
.
*) #option for other values
Commands_for_no_match
;;
esac
6.break、continue、exit和return語句
Break跳出整個循環體,然後執行循環體外接下來的代碼;
Continue 結束本次循環,繼續下次循環;
Exit 退出整個腳本,一般在其後加入一個整數(如exit 0),作為返回代碼發送給系統;
Return 用於在函數中返回數據,或返回一個結果給調用函數
7.here文檔
用於將輸入重定向到某個交互式shell腳本或程序,而不需要用戶介入。
Program_name << LABLE
Program_input_1
Program_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
[email protected] “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,talk
18.大小寫文本
用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.定時運行腳本cron
Crontab -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/console
21.解析命令行參數getopts
Getopts optionstring VARIABLE
Optionstring 是所需的各種參數,用冒號隔開,如果不需要參數,則冒號可以省略。如果optionstring前有一個冒號,則任何未匹配到時會在VARIBLE中加載一個?號
使用getopts的作用是解析出參數,然後作用此參數做不同的操作。如:
While getopts :s:m:h:d:p: TM
Do
Case $TM in
S)
Do something
;;
M)
Do something
;;
.
.
.
?)
Exit 1
;;
Esac
22.逐行處理文件
While read LINE
Do
Echo “$LINE”
Done <$FILENAME
23.作用select命令創建菜單
Select menu in Yes No Quit
Do
Case $menu in
Yes)
Do something
;;
No)
Do something
;;
Quit)
Break
;;
*)
Do something
;;
Esac
done