Shell教程(三):数组/Arrays、基本运算符
定義數(shù)組值:
一個數(shù)組變量和標(biāo)量變量之間的差異可以解釋如下。
說,你正試圖表示各種學(xué)生為變量集的名字。每一個單個變量是一個標(biāo)量變量,如下所示:
NAME01="Zara" NAME02="Qadir" NAME03="Mahnaz" NAME04="Ayan" NAME05="Daisy"我們可以用一個單一的陣列來存儲所有上述提及的名稱。以下是最簡單的方法創(chuàng)建一個數(shù)組變量分配一個值,其索引之一。這是表示,如下所示:
array_name[index]=valuearray_name?是數(shù)組名,索引是在陣列中,你要設(shè)置的項(xiàng)目索引,值是你想要的值設(shè)置該項(xiàng)目。?
作為一個例子,下面的命令:
NAME[0]="Zara" NAME[1]="Qadir" NAME[2]="Mahnaz www.yiibai.com" NAME[3]="Ayan" NAME[4]="Daisy"如果您使用的是ksh shell在這里初始化數(shù)組的語法:
set -A array_name value1 value2 ... valuen如果您使用的是bash shell中,這里是初始化數(shù)組的語法:
array_name=(value1 ... valuen)訪問數(shù)組值:
當(dāng)您設(shè)置任何數(shù)組變量,并可訪問它,如下所示:
${array_name[index]}在這里,array_name是數(shù)組的名稱,index是索引進(jìn)行訪問的值。下面是一個簡單的例子:
#!/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您可以訪問數(shù)組中的所有項(xiàng)目通過以下方式之一:
${array_name[*]} ${array_name[@]}?array_name 是數(shù)組的名字你所感興趣的 以下是個最簡單的例子:
#!/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[@]}"這將產(chǎn)生以下結(jié)果:
$./test.sh First Method: Zara Qadir Mahnaz Ayan Daisy Second Method: Zara Qadir Mahnaz Ayan Daisy?
?
有各種不同的運(yùn)算符shell都支持。本教程是基于默認(rèn)shell(Bourne),所以我們要涵蓋所有重要的Bourne Shell運(yùn)算符。
有以下的運(yùn)算符,我們將要討論的:
·????????算術(shù)運(yùn)算符。
·????????關(guān)系運(yùn)算符。
·????????布爾運(yùn)算符。
·????????字符串運(yùn)算符。
·????????文件測試操作。
Bourne shell的最初并沒有任何機(jī)制來執(zhí)行簡單的算術(shù),但它使用外部程序,無論是awk或必須簡單的程序expr。
下面是簡單的例子,把兩個數(shù)相加:
#!/bin/sh ? val=`expr 2 + 2` echo "Total value : $val"這將產(chǎn)生以下結(jié)果:
Total value : 4記下有以下幾點(diǎn):
·????????運(yùn)算符和表達(dá)式之間必須有空格,例如2+2是不正確的,因?yàn)樗鼞?yīng)該寫成2 + 2。
·????????``,稱為倒逗號之間應(yīng)包含完整的表達(dá)。
算術(shù)運(yùn)算符:
算術(shù)運(yùn)算符有以下Bourne Shell支持。
假設(shè)變量a=10,變量b=20:
算術(shù)運(yùn)算符例子
| 運(yùn)算符 | 描述 | 例子 |
| + | 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. |
這是非常重要的,這里要注意,所有的條件式將放在方括號內(nèi),他們身邊有一個空格,例如 [ $a == $b ]是正確的,為[$a==$b]?是不正確的。
所有的算術(shù)計(jì)算,使用長整數(shù)。
關(guān)系運(yùn)算符:
Bourne Shell的支持,關(guān)系運(yùn)算符的具體數(shù)值。這些運(yùn)算符不能使用字符串值,除非它們的值是數(shù)字。
例如,運(yùn)算符將努力檢查10和20之間的關(guān)系,以及在“10”和“20”,但不是“10”和“21”之間。
假設(shè)變量a=10,變量b=20:
關(guān)系運(yùn)算符
| 運(yùn)算符 | 描述 | 示例 |
| -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. |
這里要注意,所有的條件式將放在方括號內(nèi),他們周圍有一個空格,這是非常重要的,例如?[ $a <= $b]是正確的,?[$a <= $b]是不正確的。
布爾運(yùn)算:
布爾運(yùn)算符有以下Bourne Shell的支持。
假設(shè)變量一個變量b=10,然后變量b=20:
布爾運(yùn)算示例
| 運(yùn)算符 | 描述 | 示例 |
| ! | 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. |
字符串運(yùn)算符:
有下列字符串運(yùn)算由Bourne Shell支持。
假設(shè)變量a=“abc”和變量b=“efg”:
關(guān)系運(yùn)算例子
| 運(yùn)算符 | 描述 | 例子 |
| = | 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文件相關(guān)聯(lián)的各種屬性。
假設(shè)一個的變量文件保存現(xiàn)有文件名“test”,其大小為100字節(jié),有讀,寫和執(zhí)行權(quán)限:
文件測試操作例子
| 操作符 | 描述 | 示例 |
| -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運(yùn)算符給出簡單的用法。
C Shell 運(yùn)算符
Korn Shell 運(yùn)算符:
以下鏈接將在Korn??Shell運(yùn)算符給出簡單的用法
Korn Shell 運(yùn)算符
from: http://www.yiibai.com/shell/what_is_shell.html#
總結(jié)
以上是生活随笔為你收集整理的Shell教程(三):数组/Arrays、基本运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell教程(二):变量、特殊变量
- 下一篇: Shell教程(四):条件语句、循环语句