1.變數
1.1 常規變數
變數名的命名須遵循如下規則:
定義變數時,變數名不加美元符號($),如:
variablename="value"
使用乙個定義過的變數,只要在變數名前面加美元符號($)即可,{}可加可不加,如:
your_name="mozhiyan"
echo $your_name
echo $
已定義的變數,可以被重新定義,如:
myurl=""
echo $
myurl=""
echo $
使用 readonly 命令可以將變數定義為唯讀變數,唯讀變數的值不能被改變。
下面的例子嘗試更改唯讀變數,結果報錯:
#!/bin/bash
myurl=""
readonly myurl
myurl=""
執行指令碼,結果如下:
/bin/sh: name: this variable is read only.
使用 unset 命令可以刪除變數。語法:
unset variable_name
變數被刪除後不能再次使用;unset 命令不能刪除唯讀變數。
舉個例子:
#!/bin/sh
myurl=""
unset myurl
echo $myurl
上面的指令碼沒有任何輸出。
1.2 特殊變數變數
含義$0
當前指令碼的檔名
$n傳遞給指令碼或函式的引數。
$#傳遞給指令碼或函式的引數個數。
$*傳遞給指令碼或函式的所有引數。
$@傳遞給指令碼或函式的所有引數。
$?上個命令的退出狀態,或函式的返回值。
$$當前shell程序id。對於 shell 指令碼,就是這些指令碼所在的程序id。 例:
#!/bin/bash
echo "file name: $0"
echo "first parameter : $1"
echo "first parameter : $2"
echo "quoted values: $@"
echo "quoted values: $*"
echo "total number of parameters : $#"
執行結果:
$./test.sh zara ali
file name : ./test.sh
first parameter : zara
second parameter : ali
quoted values: zara ali
quoted values: zara ali
total number of parameters : 2
∗和2.字串@ 的區別∗和
@ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(」 「)包含時,都以」1""
2」 … 「$n」 的形式輸出所有引數。
但是當它們被雙引號(」 「)包含時,」∗"
會將所有
的引數作
為乙個整
體,以"
1 2…
n」的形式輸出所有引數;」@"
會將各個
引數分開
,以" 1」 「2"
…"n」 的形式輸出所有引數。
字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟php類似。2.1 單引號
例:
str='this is a string'
2.2 雙引號
例1:
your_name='qinjx'
str="hello, i know your are \"$your_name\"! \n"
例2:
your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, $ !"
echo $greeting $greeting_1
2.3 獲取字串長度
長度的獲取及通過上面的特殊變數$#演變來的
string="abcd"
echo $
2.4 提取子字串
例1,擷取1-4,三個字串,注意兩種方式的起始位計算方式是不一樣的,一種是從0開始,一種是從1開始。
string="alibaba is a great company"
echo $
或者echo `expr substr "$string"
24`
例2,擷取1後面的全部字元
echo $
2.5 查詢子字串
查詢首字母所在的位置,例:
string="alibaba is a great company"
echo `expr index "$string" is`
echo `expr index "$string" llll`
echo `expr index "$string" bjhjkhjkhj`
echo `expr index "$string" gg`
結果:
324
14
可以看出,該函式只檢測第一字母第一次出現的位置。
3.陣列
bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。類似與c語言,陣列元素的下標由0開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於0。3.1 定義陣列
在shell中,用括號來表示陣列,陣列元素用「空格」符號分割開。
定義陣列的一般形式為:array_name=(value1 ... valuen)
例如:
array_name=(value0 value1 value2 value3)
或者array_name=(
value0
value1
value2
value3
)
還可以單獨定義陣列的各個分量:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
可以不使用連續的下標,而且下標的範圍沒有限制。
3.2 讀取陣列
讀取陣列元素值的一般格式是:$
例如:
valuen=$
舉個例子:
#!/bin/sh
name[0]="zara"
name[1]="qadir"
name[2]="mahnaz"
name[3]="ayan"
name[4]="daisy"
echo "first index: $"
echo "second index: $"
執行指令碼,輸出:
$./test.sh
first index: zara
second index: qadir
使用@ 或 * 可以獲取陣列中的所有元素,例如:
$
$
舉個例子:
#!/bin/sh
name[0]="zara"
name[1]="qadir"
name[2]="mahnaz"
name[3]="ayan"
name[4]="daisy"
echo "first method: $"
echo "second method: $"
執行指令碼,輸出:
$./test.sh
first method: zara qadir mahnaz ayan daisy
second method: zara qadir mahnaz ayan daisy
3.3 獲取陣列的長度
獲取陣列長度的方法與獲取字串長度的方法相同,例如:
變數、字串、陣列的分析就到這邊,有感悟時會持續會更新。
Linux學習之路 shell變數(一)
一 變數的顯示與設定 1 變數的顯示運用echo命令 符號 上圖例子顯示的是系統變數,咱們可以自己設定變數 2 設定變數運用 符號 設定了變數niu 值為 niunai 變數設定規則 1 等號兩邊不能有空格的出現 2 變數只能是數字和字母的組合,但數字不能在前面 3 變數值可以用雙引號和單引號將值內...
shell命令學習之路
當shell指令碼具有可執行許可權時,用sh filename與.filename執行指令碼是沒有區別得。filename是因為當前目錄沒有在path中,所有 是用來表示當前目錄的。sh filename 重新建立乙個子shell,在子shell中執行指令碼裡面的語句,該子shell繼承父shell...
Linux學習 Shell基礎03
1.什麼是變數?變數是計算機的記憶體單元,裡面可以儲存值。2.變數設定規則 1 字母 數字 下劃線,但是不能以數字開頭 2 在bash中,變數的預設型別都是字串型,如果需要進行數值運算,則必須指定變數型別為數值型。3 變數用等號連線時候,等號左右不能有空格 4 如果變數的值裡有空格,則需要用引號括起...