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