1. $變量
變量不需先聲明,使用$引用變量的值
x=12 ##等號(hào)左右不能有空格
echo $x
一些重要變量
$HOME 當(dāng)前用戶主目錄
$PATH 搜索目錄
$PS1 命令提示符
$PS2 二級(jí)提示符
$IFS shell輸入分隔符,通常為空格、制表符和換行符
$# 參數(shù)個(gè)數(shù)
$0 shell腳本名字
$1,$2... 第1,2個(gè)參數(shù)
$* 所有參數(shù),用IFS中的第一個(gè)字符分隔
$@ 類(lèi)似$*,但不使用IFS字符分隔
$? 前條命令的退出狀態(tài)0(true) 1(false)
2. 單引號(hào) ( '' )
當(dāng)shell碰到第一個(gè)單引號(hào)時(shí),它忽略掉其后直到右引號(hào)的所有特殊字符
3. 雙引號(hào) ( " " )
雙引號(hào)作用與單引號(hào)類(lèi)似,區(qū)別在于它沒(méi)有那么嚴(yán)格。單引號(hào)告訴shell忽略所有特殊字符,
而雙引號(hào)中的三種特殊字符不被忽略:$,\,` ,即雙引號(hào)會(huì)解釋字符串的特別意思,而單引號(hào)直接使用字符串。
4. 反引號(hào)(``)或$()
命令替換,$()格式受到POSIX標(biāo)準(zhǔn)支持,$(command),執(zhí)行命令并捕獲其輸出,可以放到變量中如下面的expr例子
5. (( )) 或let
算術(shù)賦值,用來(lái)給表達(dá)式賦值并返回一個(gè)狀態(tài)碼。利用算術(shù)賦值可以進(jìn)行賦值運(yùn)算及邏輯比較
((x=x+1)) ## x=$((x+1))
if ((30 < age && age < 60)); then
6. $(( ))
算術(shù)擴(kuò)展,用于顯示表達(dá)式的值或者把值賦給一個(gè)變量,可替代expr命令,比expr更高效.
x=$(($x+1)) ##$(( ))中單個(gè)變量引用$符可選,即可寫(xiě)成 x=$((x+1))
x=$(expr $x + 1) ##加號(hào)左右要有空格 expr $x + 1 執(zhí)行結(jié)果捕獲其輸出放到變量
7. [ ] 或test
if [ -f fred.c ] ##要有空格
if [ 30 -lt $age -a $age -lt 60 ]; then
8. [[ ]]
作用與[ ]類(lèi)似,操作符不同,與C語(yǔ)言操作一致
if [[ 30 < $age && $age < 60 ]]; then ##要有空格,變量前要有$
9. && || 及!
statement1 && statement2 && statement3,上一條命令返回true才執(zhí)行下一條;||類(lèi)似
if [ -f fred.c ] && echo 'exists' && [ -f fred.h ] ## echo 返回的是true
10. ( ) 子shell
11. : 空命令,返回true
12. << Here文檔
bash中命令行擴(kuò)展順序
(1)花括號(hào)擴(kuò)展 rm {main,temp,test}.c
(2)代字符擴(kuò)展 echo ~
(3)參數(shù)擴(kuò)展和變量擴(kuò)展 $a
(4)算術(shù)擴(kuò)展 x=$(($x+1))
(5)命令替換 $(command)
(6)分詞 IFS
(7)路徑名
(8)處理替換