Shell 數組
Linux Shell在編程方面比Windows批處理強大很多,無論是在循環、運算。
bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。類似與C語言,數組元素的下標由0開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於0。
定義數組:
在Shell中,用括號來表示數組,數組元素用“空格”符號分割開。定義數組的一般形式爲:
數組名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)
或者:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
讀取數組:
讀取數組元素值的一般格式是:
${數組名[下標]}
例如:
array_name[n]=valuen
echo v=${array_name[n]} #輸出valuen
使用@符號可以獲取數組中的所有元素,例如:
echo ${array_name[@]}
獲取數組的長度:
array_name=(value0 value1 value2 value3) # 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}
Shell 的echo 指令
echo是Shell的一個內部指令,用於在屏幕上打印出指定的字符串。
如果變量與其它字符相連的話,需要使用大括號({ }):
mouth=5
echo "${mouth}-5-2014"
顯示換行:
echo "OK!\n"
echo "It is a test"
顯示不換行:
echo "OK!\c"
echo "It is a test"
顯示結果定向到文件
echo "It is a test" > myfile
Shell test 命令
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。
數值測試
參數 | 說明 |
-eq | 等於則爲真 |
-ne | 不等於則爲真 |
-gt | 大於則爲真 |
-ge | 大於等於則爲真 |
-lt | 小於則爲真 |
-le | 小於等於則爲真 |
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo 'The two numbers are equal!'
else
echo 'The two numbers are not equal!'
fi
字符串測試
參數 | 說明 |
= | 等於則爲真 |
!= | 不相等則爲真 |
-z 字符串 | 字符串長度僞則爲真 |
-n 字符串 | 字符串 字符串長度不僞則爲真 |
num1=100
num2=100
if test num1=num2
then
echo 'The two strings are equal!'
else
echo 'The two strings are not equal!'
fi
文件測試
參數 | 說明 |
-e 文件名 | 如果文件存在則爲真 |
-r 文件名 | 如果文件存在且可讀則爲真 |
-w 文件名 | 如果文件存在且可寫則爲真 |
-x 文件名 | 如果文件存在且可執行則爲真 |
-s 文件名 | 如果文件存在且至少有一個字符則爲真 |
-d 文件名 | 如果文件存在且爲目錄則爲真 |
-f 文件名 | 如果文件存在且爲普通文件則爲真 |
-c 文件名 | 如果文件存在且爲字符型特殊文件則爲真 |
-b 文件名 | 如果文件存在且爲塊特殊文件則爲真 |
cd /bin
if test -e ./bash
then
echo 'The file already exists!'
else
echo 'The file does not exists!'
fi
另外,Shell還提供了與( ! )、或( -o )、非( -a )三個邏輯操作符用於將測試條件連接起來,其優先級爲:“!”最高,“-a”次之,“-o”最低。例如:
cd /bin
if test -e ./notFile -o ./bash
then
echo 'One file exists at least!'
else
echo 'Both dose not exists!'
fi