變量替換
$variable 是 ${variable}的簡寫
39 hello="A B C D"
40 echo $hello # A B C D
41 echo "$hello" # A B C D
引號保留變量裏面的空白
1 echo "$uninitialized" # (blank line)
2 let "uninitialized += 5" # Add 5 to it.
3 echo "$uninitialized"
未初始化的變量是null,可是在算數表達式中等於0
命令替換
17 a=`ls -l` # Assigns result of 'ls -l' command to 'a'
18 echo $a
或
a=$(ls -l)
echo $a
字符串+整數等於整數,字符串至關於0
可是在除以一個null變量的時候,系統報錯。
變量類型
本地變量
在代碼塊可見
環境變量
影響shell和用戶接口的變量
位置參數
取最後的參數
1 args=$# # Number of args passed.
2 lastarg=${!args}
或
lastarg=${!#}
[...]和``.``.``.``
使用``.``.``.``比起[]能夠阻止在腳本中常見的邏輯錯誤
例如:&&, ||, <, and > 操做
在進行算數運算的時候,``.``.``.``會將八進制和十六進制進行自動計算而[]
則不能夠
5 decimal=15
6 octal=017 # = 15 (decimal)
7 hex=0x0f # = 15 (decimal)
8
9 if [ "$decimal" -eq "$octal" ]
10 then
11 echo "$decimal equals $octal"
12 else
13 echo "$decimal is not equal to $octal" # 15 is not equal to 017
14 fi # Doesn't evaluate within [ single brackets ]!
17 if [[ "$decimal" -eq "$octal" ]]
18 then
19 echo "$decimal equals $octal" # 15 equals 017
20 else
21 echo "$decimal is not equal to $octal"
22 fi # Evaluates within ` double brackets `!
((...))算數測試
若是表達式計算是0,則它的退出狀態碼是1或false
若是表達式計算是非0,則它的退出狀態碼是0或true
它的退出狀態和[...]相反
echo ${aa##*/} 獲取變量aa的文件名稱 以/位分隔符
${filename##*.} != "gz"
filename##*. 獲取filename的擴展名
Infinite Monkeys
AppMakr
字符串操做
獲取字符串長度
${#string}
expr length $string
expr "$string" : '.*'
獲取從字符串開頭匹配的字符串的長度
expr match "$string" '$substring'
expr "$string" : '$substring'
$substring is a regular expression
獲取子串在字符串中開始的位置
expr index $string $substring
取出子串
${string:position}
${string:position:length}
shell