0、腳本編寫初步介紹
(1)腳本第一行以 #!/bin/sh 開始,也可以用 #!/bin/bash 開始,但是第一行必須以這種方式開始.
(2)腳本名需要以.sh結尾
(3)#開頭的句子表示注釋
(4)若要執行腳本文件,需給腳本賦權限,chmod 755 filenme
(5)腳本執行./filename
1、基本語法
(1)變量:
- 變量的類型:
運行shell時,會同時存在三種變量:
1) 局部變量
局部變量在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量。
2) 環境變量
所有的程序,包括shell啟動的程序,都能訪問環境變量,有些程序需要環境變量來保證其正常運行。必要的時候shell腳本也可以定義環境變量。
3) shell變量
shell變量是由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了shell的正常運行
- 特殊變量:
定義變量: m=100 使用變量: echo $m echo ${m}
注:
1,變量名和等號之間不能有空格;
2,首個字符必須為字母(a-z,A-Z)。
3, 中間不能有空格,可以使用下划線(_)。
4, 不能使用標點符號。
5, 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。
6,對於變量的{} 是可以選擇的, 它的目的為幫助解釋器識別變量的邊界.
7,$* 和 $@ 的區別為: $* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。
8,$? 可以獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行后的返回結果。退出狀態是一個數字,一般情況下,大部分命令執行成功會返回 0,失敗返回 1。
(2)shell中的字符串:
- 單引號:
- 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
- 單引號字串中不能出現單引號(對單引號使用轉義符后也不行)。
- 雙引號:
- 雙引號里可以有變量
- 雙引號里可以出現轉義字符
(3)shell中的替換:
- 轉義符:
在echo中可以用於的轉義符有:
- 變量替換:
可以根據變量的狀態(是否為空、是否定義等)來改變它的值.
(4)shell中的運算符:
- 算術運算符:
原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr. 下面使用expr進行; expr是一款表達式計算工具,使用它可以完成表達式的求值操作;
- 關系運算符:
只支持數字,不支持字符串,除非字符串的值是數字。常見的有:
- 布爾運算符:
- 字符串運算符:
- 文件測試運算符:
檢測 Unix 文件的各種屬性。
(5)shell中的數組:
bash支持一維數組, 不支持多維數組, 它的下標從0開始編號. 用下標[n] 獲取數組元素;
- 定義數組:
在shell中用括號表示數組,元素用空格分開。 如:
array_name=(value0 value1 value2 value3)
也可以單獨定義數組的各個分量,可以不使用連續的下標,而且下標的范圍沒有限制。如:
array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
- 讀取數組:
讀取某個下標的元素一般格式為:
${array_name[index]}
讀取數組的全部元素,用@或*
${array_name[*]} ${array_name[@]}
- 獲取數組的信息:
取得數組元素的個數:
length=${#array_name[@]} #或 length=${#array_name[*]}
獲取數組的下標:
length=${!array_name[@]} #或 length=${!array_name[*]}
取得數組單個元素的長度:
lengthn=${#array_name[n]}
2、簡單控制語句:
(1)if 語句:
包括: 1, if if [ 表達式 ] then 語句 fi 2. if else if [ 表達式 ] then 語句 else 語句 fi 3. if else if if [ 表達式] then 語句 elif [ 表達式 ] then 語句 elif [ 表達式 ] then 語句 fi
例:
包括: 1, if a=5 if [ $a -lt 10 ] then echo $a fi 2. if else m=5 if [$m -lt 3 ] then echo $m+1 else echo $m fi 3. if else if if [ $1 -lt 3 ] then val=`expr $1 + 1` echo $val elif [ $1 -gt 6 ] then val=`expr $1 - 1` echo $val else echo $1 fi
注:expr前后為反引號··,運算符+、-前后需要空格
(2)for循環:
格式:
for 變量 in 列表 do command1 command2 ... commandN done
注:列表是一組值(數字、字符串等)組成的序列,每個值通過空格分隔。每循環一次,就將列表中的下一個值賦給變量。
例:
for loop in 1 2 3 4 5 do echo "The value is: $loop" done
(3)while循環:
格式:
while command do Statement(s) to be executed if command is true done
例:
int=1 m=8 while(( $int<=5 )) do m=9 echo $int echo $m let "int++" done
轉自博客園1,