1、chmod +x file加上執(zhí)行權(quán)限罢缸,否則會提示無執(zhí)行權(quán)限。
2沼侣、注意執(zhí)行腳本時候或者全目錄祖能,或者./file.sh,如果不加的話蛾洛,linux 默認會從PATH 里去找該 file.sh养铸。
3、定義變量時轧膘,變量名不加美元符號($钞螟,PHP語言中變量需要),如:your_name="runoob.com"
注意谎碍,變量名和等號之間不能有空格鳞滨。
4、使用一個定義過的變量蟆淀,只要在變量名前面加美元符號即可拯啦,如:your_name="qinjx"
echo $your_name
echo ${your_name}
變量名外面的花括號是可選的,加不加都行熔任,加花括號是為了幫助解釋器識別變量的邊界褒链;推薦給所有變量加上花括號,這是個好的編程習(xí)慣疑苔。
5甫匹、字符串是shell編程中最常用最有用的數(shù)據(jù)類型(除了數(shù)字和字符串,也沒啥其它類型好用了),字符串可以用單引號兵迅,也可以用雙引號抢韭,也可以不用引號。單雙引號的區(qū)別跟PHP類似恍箭。
單引號 str='this is a string'
單引號字符串的限制:
單引號里的任何字符都會原樣輸出刻恭,單引號字符串中的變量是無效的;
單引號字串中不能出現(xiàn)單引號(對單引號使用轉(zhuǎn)義符后也不行)季惯。
雙引號 your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"
雙引號的優(yōu)點:
雙引號里可以有變量吠各;雙引號里可以出現(xiàn)轉(zhuǎn)義字符
6、獲取字符串長度 string="abcd"
echo ${#string}#輸出 4
7勉抓、在Shell中,用括號來表示數(shù)組候学,數(shù)組元素用"空格"符號分割開藕筋。定義數(shù)組的一般形式為:
數(shù)組名=(值1值2...值n)??可以不使用連續(xù)的下標,而且下標的范圍沒有限制梳码。使用@或者*符號可以獲取數(shù)組中的所有元素隐圾,例如:echo ${array_name[@]} 。Bash Shell 只支持一維數(shù)組(不支持多維數(shù)組)掰茶,初始化時不需要定義數(shù)組大小
8暇藏、以"#"開頭的行就是注釋,會被解釋器忽略濒蒋。sh里沒有多行注釋盐碱,只能每一行加一個#號。如果在開發(fā)過程中沪伙,遇到大段的代碼需要臨時注釋起來瓮顽,過一會兒又取消注釋,怎么辦呢围橡?每一行加個#符號太費力了暖混,可以把這一段要注釋的代碼用一對花括號括起來,定義成一個函數(shù)翁授,沒有地方調(diào)用這個函數(shù)拣播,這塊代碼就不會執(zhí)行,達到了和注釋一樣的效果收擦。
8贮配、我們可以在執(zhí)行 Shell 腳本時,向腳本傳遞參數(shù)炬守,腳本內(nèi)獲取參數(shù)的格式為:$n牧嫉。n代表一個數(shù)字,1 為執(zhí)行腳本的第一個參數(shù),2 為執(zhí)行腳本的第二個參數(shù)酣藻,以此類推……$0為執(zhí)行的文件名曹洽;
9、原生bash不支持簡單的數(shù)學(xué)運算辽剧,但是可以通過其他命令來實現(xiàn)送淆,例如 awk 和 expr,expr 最常用怕轿。expr 是一款表達式計算工具偷崩,使用它能完成表達式的求值操作。例如撞羽,兩個數(shù)相加(注意使用的是反引號 ` 而不是單引號 '):
#!/bin/bash
val=`expr 2 + 2`
echo"兩數(shù)之和為 : $val"
兩點注意:
表達式和運算符之間要有空格阐斜,例如 2+2 是不對的,必須寫成 2 + 2诀紊,這與我們熟悉的大多數(shù)編程語言不一樣谒出。
完整的表達式要被 ` ` 包含,注意這個字符不是常用的單引號邻奠,在 Esc 鍵下邊笤喳。
乘號(*)前邊必須加反斜杠(\)才能實現(xiàn)乘法運算;
10碌宴、
關(guān)系運算符只支持數(shù)字杀狡,不支持字符串,除非字符串的值是數(shù)字贰镣。
下表列出了常用的關(guān)系運算符呜象,假定變量 a 為 10,變量 b 為 20:
運算符說明舉例
-eq檢測兩個數(shù)是否相等八孝,相等返回 true董朝。[ $a -eq $b ] 返回?false。
-ne檢測兩個數(shù)是否相等干跛,不相等返回 true子姜。[ $a -ne $b ] 返回 true。
-gt檢測左邊的數(shù)是否大于右邊的楼入,如果是哥捕,則返回 true。[ $a -gt $b ] 返回 false嘉熊。
-lt檢測左邊的數(shù)是否小于右邊的遥赚,如果是,則返回 true阐肤。[ $a -lt $b ] 返回 true凫佛。
-ge檢測左邊的數(shù)是否大于等于右邊的讲坎,如果是,則返回 true愧薛。[ $a -ge $b ] 返回 false晨炕。
-le檢測左邊的數(shù)是否小于等于右邊的,如果是毫炉,則返回 true瓮栗。[ $a -le $b ] 返回 true。
EQ 就是 EQUAL等于
NQ 就是 NOT EQUAL不等于
GT 就是 GREATER THAN大于
LT 就是 LESS THAN小于
GE 就是 GREATER THAN OR EQUAL 大于等于
LE 就是 LESS THAN OR EQUAL 小于等于
11瞄勾、echo`date`
注意:這里使用的是反引號`, 而不是單引號'费奸。結(jié)果將顯示當前日期
12、%d %s %c %f格式替代符詳解:
d: Decimal 十進制整數(shù)-- 對應(yīng)位置參數(shù)必須是十進制整數(shù)进陡,否則報錯愿阐!
s: String 字符串-- 對應(yīng)位置參數(shù)必須是字符串或者字符型,否則報錯四濒!
c: Char 字符-- 對應(yīng)位置參數(shù)必須是字符串或者字符型换况,否則報錯!
f: Float 浮點-- 對應(yīng)位置參數(shù)必須是數(shù)字型盗蟆,否則報錯!
如:其中最后一個參數(shù)是 "def"舒裤,%c 自動截取字符串的第一個字符作為結(jié)果輸出喳资。
$? printf? "%d %s %c\n"? 1 "abc" "def"?
1? abc d
13、代碼中的 [] 執(zhí)行基本的算數(shù)運算腾供,如:
#!/bin/bash
a=5
b=6
result=$[a+b]# 注意等號兩邊不能有空格echo"result 為: $result"
14仆邓、和Java、PHP等語言不一樣伴鳖,sh的流程控制不可為空节值,如果else分支沒有語句執(zhí)行,就不要寫這個else榜聂。if 語句語法格式:
if condition
then
command1
command2...
commandN
fi
末尾的fi就是if倒過來拼寫
15搞疗、case的語法和C family語言差別很大,它需要一個esac(就是case反過來)作為結(jié)束標記须肆,每個case分支用右圓括號匿乃,用兩個分號表示break。
16豌汇、linux shell 可以用戶定義函數(shù)幢炸,然后在shell腳本中可以隨便調(diào)用。
shell中函數(shù)的定義格式如下:
[function]funname[()]{action;[returnint;]}
說明:
1拒贱、可以帶function fun() 定義宛徊,也可以直接fun() 定義,不帶任何參數(shù)佛嬉。
2、參數(shù)返回闸天,可以顯示加:return 返回暖呕,如果不加,將以最后一條命令運行結(jié)果号枕,作為返回值缰揪。 return后跟數(shù)值n(0-255