Shell學習之路 03 變數 字串 陣列

2021-07-29 11:48:59 字數 4696 閱讀 5147

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

∗和

@ 的區別∗和

@ 都表示傳遞給函式或指令碼的所有引數,不被雙引號(」 「)包含時,都以」1""

2」 … 「$n」 的形式輸出所有引數。

但是當它們被雙引號(」 「)包含時,」∗"

會將所有

的引數作

為乙個整

體,以"

1 2…

n」的形式輸出所有引數;」@"

會將各個

引數分開

,以" 1」 「2"

…"n」 的形式輸出所有引數。

2.字串
字串是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 如果變數的值裡有空格,則需要用引號括起...