shell語法

參考原文http://www.mamicode.com/info-detail-605431.html


1、變量####

1.1 定義變量#####
variableName="value"   #變量名前不加$符號,變量名和等會之間不能有空格,變量可重新被定義
num=100
1.2 使用變量#####
v="hello world"   #定義變量
echo  $v          #使用變量在變量名前$符號,花括號是為了識別變量的邊界,可選
echo  ${v}

readonly  v    #將變量設(shè)置為只讀

unset  v       #刪除變量
1.3 特殊變量#####
$0  當(dāng)前腳本的文件名
$n  傳遞給腳本或函數(shù)的參數(shù)。n 是一個數(shù)字,表示第幾個參數(shù)。例如,第一個參數(shù)是$1,第二個參數(shù)是$2。
$#  傳遞給腳本或函數(shù)的參數(shù)個數(shù)。
$*  傳遞給腳本或函數(shù)的所有參數(shù)。
$@  傳遞給腳本或函數(shù)的所有參數(shù)。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
$?  上個命令的退出狀態(tài),或函數(shù)的返回值。
$$  當(dāng)前Shell進(jìn)程ID。對于 Shell 腳本,就是這些腳本所在的進(jìn)程ID。
1.3 變量替換,轉(zhuǎn)移字符#####
#!/bin/bash
a=10
echo -e "Value of a is $a \n"

輸出:
Value of a is 10   
 
# -e 表示對轉(zhuǎn)義字符進(jìn)行替換
# 如果不使用 -e 選項,將會原樣輸出:
Value of a is 10\n

轉(zhuǎn)譯字符

\\  反斜杠
\a  警報,響鈴
\b  退格(刪除鍵)
\f  換頁(FF),將當(dāng)前位置移到下頁開頭
\n  換行
\r  回車
\t  水平制表符(tab鍵) 
\v  垂直制表符

可以使用 echo 命令的 -e 選項禁止轉(zhuǎn)義,默認(rèn)也是不轉(zhuǎn)義的;使用 -n 選項可以禁止插入換行符。
<br />
命令替換
命令替換是指Shell可以先執(zhí)行命令,將輸出結(jié)果暫時保存

#!/bin/bash
DATE=`date`             #注意是反斜杠
echo "Date is $DATE"

輸出:
Date is Thu Jul  2 03:59:57 MST 2009

<br />
變量替換
變量替換可以根據(jù)變量的狀態(tài)(是否為空、是否定義等)來改變它的值

${var}         #變量本來的值
${var:-word}     #如果變量 var 為空或已被刪除(unset),那么返回 word,但不改變 var 的值。
${var:=word}     #如果變量 var 為空或已被刪除(unset),那么返回 word,并將 var 的值設(shè)置為 word。
${var:?message   #如果變量 var 為空或已被刪除(unset),那么將消息 message 送到標(biāo)準(zhǔn)錯誤輸出,可以用來檢測變量 var 是否可以被正常賦值。
若此替換出現(xiàn)在Shell腳本中,那么腳本將停止運行。
${var:+word}     #如果變量 var 被定義,那么返回 word,但不改變 var 的值。

<br />

2、運算符####

Bash 支持很多運算符,包括算數(shù)運算符、關(guān)系運算符、布爾運算符、字符串運算符和文件測試運算符。
原生bash不支持簡單的數(shù)學(xué)運算,但是可以通過其他命令來實現(xiàn),例如 awk 和 expr,expr 最常用。
expr 是一款表達(dá)式計算工具,使用它能完成表達(dá)式的求值操作。

#!/bin/bash
val=`expr 2 + 2`
echo "Total value : $val"
輸出:
Total value : 4
2.1 算術(shù)運算符#####

乘號()*前邊必須加反斜杠(\)才能實現(xiàn)乘法運算

#!/bin/sh
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
輸出:
a + b : 30
#算數(shù)運算符
+   加法  `expr $a + $b` 結(jié)果為 30。
-   減法  `expr $a - $b` 結(jié)果為 10。
*   乘法  `expr $a \* $b` 結(jié)果為  200。
/   除法  `expr $b / $a` 結(jié)果為 2。
%   取余  `expr $b % $a` 結(jié)果為 0。
=   賦值  a=$b 將把變量 b 的值賦給 a。
==  相等。用于比較兩個數(shù)字,相同則返回 true。 [ $a == $b ] 返回 false。
!=  不相等。用于比較兩個數(shù)字,不相同則返回 true。   [ $a != $b ] 返回 true。

注意:條件表達(dá)式要放在方括號之間,并且要有空格,例如 [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]。

#關(guān)系運算符
-eq 檢測兩個數(shù)是否相等,相等返回 true。    [ $a -eq $b ] 返回 true。
-ne 檢測兩個數(shù)是否相等,不相等返回 true。   [ $a -ne $b ] 返回 true。
-gt 檢測左邊的數(shù)是否大于右邊的,如果是,則返回 true。 [ $a -gt $b ] 返回 false。
-lt 檢測左邊的數(shù)是否小于右邊的,如果是,則返回 true。 [ $a -lt $b ] 返回 true。
-ge 檢測左邊的數(shù)是否大等于右邊的,如果是,則返回 true。    [ $a -ge $b ] 返回 false。
-le 檢測左邊的數(shù)是否小于等于右邊的,如果是,則返回 true。   [ $a -le $b ] 返回 true。
#布爾運算符
!    非運算,表達(dá)式為 true 則返回 false,否則返回 true。 [ ! false ] 返回 true。
-o  或運算,有一個表達(dá)式為 true 則返回 true。  [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a  與運算,兩個表達(dá)式都為 true 才返回 true。  [ $a -lt 20 -a $b -gt 100 ] 返回 false。
#字符串運算符
=   檢測兩個字符串是否相等,相等返回 true。  [ $a = $b ] 返回 false。
!=  檢測兩個字符串是否相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z  檢測字符串長度是否為0,為0返回 true。  [ -z $a ] 返回 false。
-n  檢測字符串長度是否為0,不為0返回 true。 [ -z $a ] 返回 true。
str 檢測字符串是否為空,不為空返回 true。   [ $a ] 返回 true。
#文件測試運算符
-b file 檢測文件是否是塊設(shè)備文件,如果是,則返回 true。  [ -b $file ] 返回 false。
-c file 檢測文件是否是字符設(shè)備文件,如果是,則返回 true。 [ -b $file ] 返回 false。
-d file 檢測文件是否是目錄,如果是,則返回 true。 [ -d $file ] 返回 false。
-f file 檢測文件是否是普通文件(既不是目錄,也不是設(shè)備文件),如果是,則返回 true。    [ -f $file ] 返回 true。
-g file 檢測文件是否設(shè)置了 SGID 位,如果是,則返回 true。  [ -g $file ] 返回 false。
-k file 檢測文件是否設(shè)置了粘著位(Sticky Bit),如果是,則返回 true。  [ -k $file ] 返回 false。
-p file 檢測文件是否是具名管道,如果是,則返回 true。   [ -p $file ] 返回 false。
-u file 檢測文件是否設(shè)置了 SUID 位,如果是,則返回 true。  [ -u $file ] 返回 false。
-r file 檢測文件是否可讀,如果是,則返回 true。  [ -r $file ] 返回 true。
-w file 檢測文件是否可寫,如果是,則返回 true。  [ -w $file ] 返回 true。
-x file 檢測文件是否可執(zhí)行,如果是,則返回 true。 [ -x $file ] 返回 true。
-s file 檢測文件是否為空(文件大小是否大于0),不為空返回 true。 [ -s $file ] 返回 true。
-e file 檢測文件(包括目錄)是否存在,如果是,則返回 true。

<br />

3、字符串####

3.1 單引號#####

單引號字符串的限制

  • 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
  • 單引號字串中不能出現(xiàn)單引號(對單引號使用轉(zhuǎn)義符后也不行)。

雙引號的優(yōu)點

  • 雙引號里可以有變量
  • 雙引號里可以出現(xiàn)轉(zhuǎn)義字符

<br />

4、數(shù)組####

4.1 定義數(shù)組#####
array_name=(value0 value1 value2 value3)
  
array_name=(
   value0
   value1
   value2
   value3
)

array_name[0]=value0  #可以不使用連續(xù)的下標(biāo),而且下標(biāo)的范圍沒有限制。
array_name[1]=value1
array_name[2]=value2
4.2 讀取數(shù)組#####
${array_name[index]}


#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

使用@ 或 * 可以獲取數(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[@]}"

輸出:
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
4.2 獲取數(shù)組長度#####
# 取得數(shù)組元素的個數(shù)
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數(shù)組單個元素的長度
lengthn=${#array_name[n]}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容