定義數組值:
一個陣列變數和標量變數之間的差異可以解釋如下。
說,你正試圖表示各種學生為變數集的名字。每一個單個變數是一個標量變數,如下所示:
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
我們可以用一個單一的陣列來儲存所有上述提及的名稱。以下是最簡單的方法建立一個陣列變數分配一個值,其索引之一。這是表示,如下所示:
array_name[index]=value
array_name 是數組名,索引是在陣列中,你要設定的項目索引,值是你想要的值設定該項目。
作為一個例子,下面的命令:
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz www.yiibai.com"
NAME[3]="Ayan"
NAME[4]="Daisy"
如果您使用的是ksh shell在這裡初始化數組的文法:
set -A array_name value1 value2 ... valuen
如果您使用的是bash shell中,這裡是初始化數組的文法:
array_name=(value1 ... valuen)
訪問數組值:
當您設定任何陣列變數,並可訪問它,如下所示:
${array_name[index]}
在這裡,array_name是數組的名稱,index是索引進行訪問的值。下面是一個簡單的例子:
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
This would producefollowing result:
$./test.sh
First Index: Zara
Second Index: Qadir
您可以訪問數組中的所有項目通過以下方式之一:
${array_name[*]}
${array_name[@]}
array_name 是數組的名字你所感興趣的 以下是個最簡單的例子:
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"
這將產生以下結果:
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
有各種不同的運算子shell都支援。本教程是基於預設shell(Bourne),所以我們要涵蓋所有重要的Bourne Shell運算子。
有以下的運算子,我們將要討論的:
· 算術運算子。
· 關係運算子。
· 布林運算子。
· 字串運算子。
· 檔案測試操作。
Bourne shell的最初並沒有任何機制來執行簡單的算術,但它使用外部程式,無論是awk或必須簡單的程式expr。
下面是簡單的例子,把兩個數相加:
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
這將產生以下結果:
Total value : 4
記下有以下幾點:
· 運算子和運算式之間必須有空格,例如2+2是不正確的,因為它應該寫成2 + 2。
· ``,稱為倒逗號之間應包含完整的表達。 算術運算子:
算術運算子有以下Bourne Shell支援。
假設變數a=10,變數b=20:
算術運算子例子
運算子
描述
例子
+
Addition - Adds values on either side of the operator
`expr $a + $b` will give 30
-
Subtraction - Subtracts right hand operand from left hand operand
`expr $a - $b` will give -10
*
Multiplication - Multiplies values on either side of the operator
`expr $a * $b` will give 200
/
Division - Divides left hand operand by right hand operand
`expr $b / $a` will give 2
%
Modulus - Divides left hand operand by right hand operand and returns remainder
`expr $b % $a` will give 0
=
Assignment - Assign right operand in left operand
a=$b would assign value of b into a
==
Equality - Compares two numbers, if both are same then returns true.
[ $a == $b ] would return false.
!=
Not Equality - Compares two numbers, if both are different then returns true.
[ $a != $b ] would return true.
這是非常重要的,這裡要注意,所有的條件式將放在方括弧內,他們身邊有一個空格,例如 [ $a == $b ]是正確的,為[$a==$b] 是不正確的。
所有的算術計算,使用長整數。 關係運算子:
Bourne Shell的支援,關係運算子的具體數值。這些運算子不能使用字串值,除非它們的值是數字。
例如,運算子將努力檢查10和20之間的關係,以及在“10”和“20”,但不是“10”和“21”之間。
假設變數a=10,變數b=20:
關係運算子
運算子
描述
樣本
-eq
Checks if the value of two operands are equal or not, if yes then condition becomes true.
[ $a -eq $b ] is not true.
-ne
Checks if the value of two operands are equal or not, if values are not equal then condition becomes true.
[ $a -ne $b ] is true.
-gt
Checks if the value of left operand is greater than the value of right operand, if yes then condition becomes true.
[ $a -gt $b ] is not true.
-lt
Checks if the value of left operand is less than the value of right operand, if yes then condition becomes true.
[ $a -lt $b ] is true.
-ge
Checks if the value of left operand is greater than or equal to the value of right operand, if yes then condition becomes true.
[ $a -ge $b ] is not true.
-le
Checks if the value of left operand is less than or equal to the value of right operand, if yes then condition becomes true.
[ $a -le $b ] is true.
這裡要注意,所有的條件式將放在方括弧內,他們周圍有一個空格,這是非常重要的,例如 [ $a <= $b]是正確的, [$a <= $b]是不正確的。 布爾運算:
布林運算子有以下Bourne Shell的支援。
假設變數一個變數b=10,然後變數b=20:
布爾運算樣本
運算子
描述
樣本
!
This is logical negation. This inverts a true condition into false and vice versa.
[ ! false ] is true.
-o
This is logical OR. If one of the operands is true then condition would be true.
[ $a -lt 20 -o $b -gt 100 ] is true.
-a
This is logical AND. If both the operands are true then condition would be true otherwise it would be false.
[ $a -lt 20 -a $b -gt 100 ] is false. 字串運算子:
有下列字串運算由Bourne Shell支援。
假設變數a=“abc”和變數b=“efg”:
關係運算例子
運算子
描述
例子
=
Checks if the value of two operands are equal or not, if yes then condition becomes true.
[ $a = $b ] is not true.
!=
Checks if the value of two operands are equal or not, if values are not equal then condition becomes true.
[ $a != $b ] is true.
-z
Checks if the given string operand size is zero. If it is zero length then it returns true.
[ -z $a ] is not true.
-n
Checks if the given string operand size is non-zero. If it is non-zero length then it returns true.
[ -z $a ] is not false.
str
Check if str is not the empty string. If it is empty then it returns false.
[ $a ] is not false. 檔案測試操作:
有以下是操作測試Unix檔案相關聯的各種屬性。
假設一個的變數檔案儲存現有檔案名稱“test”,其大小為100位元組,有讀,寫和執行許可權:
檔案測試操作例子
操作符
描述
樣本
-b file
Checks if file is a block special file if yes then condition becomes true.
[ -b $file ] is false.
-c file
Checks if file is a character special file if yes then condition becomes true.
[ -b $file ] is false.
-d file
Check if file is a directory if yes then condition becomes true.
[ -d $file ] is not true.
-f file
Check if file is an ordinary file as opposed to a directory or special file if yes then condition becomes true.
[ -f $file ] is true.
-g file
Checks if file has its set group ID (SGID) bit set if yes then condition becomes true.
[ -g $file ] is false.
-k file
Checks if file has its sticky bit set if yes then condition becomes true.
[ -k $file ] is false.
-p file
Checks if file is a named pipe if yes then condition becomes true.
[ -p $file ] is false.
-t file
Checks if file descriptor is open and associated with a terminal if yes then condition becomes true.
[ -t $file ] is false.
-u file
Checks if file has its set user id (SUID) bit set if yes then condition becomes true.
[ -u $file ] is false.
-r file
Checks if file is readable if yes then condition becomes true.
[ -r $file ] is true.
-w file
Check if file is writable if yes then condition becomes true.
[ -w $file ] is true.
-x file
Check if file is execute if yes then condition becomes true.
[ -x $file ] is true.
-s file
Check if file has size greater than 0 if yes then condition becomes true.
[ -s $file ] is true.
-e file
Check if file exists. Is true even if file is a directory but exists.
[ -e $file ] is true. C Shell 操作符:
以下連結將在C Shell運算子給出簡單的用法。
C Shell 運算子 Korn Shell 運算子:
以下連結將在Korn Shell運算子給出簡單的用法
Korn Shell 運算子
from: http://www.yiibai.com/shell/what_is_shell.html#