shell指令碼 變數

2021-10-11 15:36:45 字數 3207 閱讀 2629

定義變數不加美元 $ 符號,使用變數時需要加美元 $ 符號

your_name=

"runoob.com"

your_name=

"qinjx"

echo

$your_name

echo

$

#花括號{}可加可不加,{}限定了變數的邊界,所以一般建議加,養成程式設計好習慣

變數名的規則

命名只能使用英文本母,數字和下劃線,首個字元不能以數字開頭。

中間不能有空格,可以使用下劃線(_)。

不能使用標點符號。

不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)。

唯讀變數

使用 readonly 命令可以將變數定義為唯讀變數,唯讀變數的值不能被改變。

myurl=

""readonly myurl

刪除變數

unset variable_name
變數被刪除後不能再次使用。unset 命令不能刪除唯讀變數。

變數型別

執行shell時,會同時存在三種變數:

(1) 區域性變數 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。

(2) 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。

(3) shell變數 shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行

字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。

單引號

str=

'this is a string'

單引號字串的限制:

單引號裡的任何字元都會原樣輸出,裡面的變數是無效的,不能出現單獨乙個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字串拼接使用。

雙引號

your_name=

'runoob'

str=

"hello, i know you are \"$your_name\"! \n"

echo -e $str

輸出結果為:

hello, i know you are "runoob"

!

雙引號的優點:

雙引號裡可以有變數,可以出現轉義字元

拼接字串

your_name=

"runoob"

#使用雙引號拼接

greeting=

"hello, "

$your_name

" !"

greeting_1=

"hello, $ !"

echo

$greeting

$greeting_1

#使用單引號拼接

greeting_2=

'hello, '

$your_name

' !'

greeting_3=

'hello, $ !'

echo

$greeting_2

$greeting_3

輸出結果為:

hello, runoob ! hello, runoob !

hello, runoob ! hello, $

!

字串的操作

(1)獲取字串長度

string=

"abcd"

echo

$#輸出 4

(2)提取子字串

以下例項從字串第 2 個字元開始擷取 4 個字元:

string=

"runoob is a great site"

echo

$# 輸出 unoo

注意:第乙個字元的索引值為 0。

(3)查詢子字串

查詢字元 i 或 o 的位置(哪個字母先出現就計算哪個):

string=

"runoob is a great site"

echo

`expr index "$string" io`

# 輸出 4

注意: 以上指令碼中 ` 是反引號,而不是單引號 ',不要看錯了哦。

bash支援一維陣列(不支援多維陣列),並且沒有限定陣列的大小。

類似於 c 語言,陣列元素的下標由 0 開始編號。獲取陣列中的元素要利用下標,下標可以是整數或算術表示式,其值應大於或等於 0。

定義陣列

陣列名=

(值1 值2 ... 值n)

寫法一:array_name=

(value0 value1 value2 value3)

寫法二:array_name=

(value0

value1

value2

value3

)寫法三:array_name[0]

=value0

array_name[1]

=value1

array_name[n]

=valuen

讀取陣列

$

valuen=

$#獲取其中乙個元素

echo

$#使用@符號可以獲取陣列中的所有元素

獲取陣列的長度

#取得陣列元素的個數

length=

$#或者

length=

$#取得陣列單個元素的長度

lengthn=

$

單行注釋:加#

多行注釋::<<<

eof注釋內容...

注釋內容...

注釋內容...

eof:<<

'注釋內容...

注釋內容...

注釋內容...

':<<

!注釋內容...

注釋內容...

注釋內容...

!

shell指令碼(變數)

1 定義及賦值 格式 變數名 變數值 等號兩邊沒有空格 2 引用 檢視 變數 格式 變數名 例 title shaodianlingxing echo title 輸出 shaodianlingxing 3 雙引號 功能 允許引用 轉義 例如 echo title group 輸出 shaodian...

shell指令碼 變數

1 shell 指令碼中變數分為三種,區域性變數,環境變數,shell變數。區域性變數 定義在函式內部 基本型別 local num hello world 區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。如果同名,shell函式定義的loc...

shell指令碼變數

環境變數和本地變數,環境變數是具有全域性屬性的。在互動式shell下面定義變數 value 100 這定義的即為本地變數,如果要將其變成環境變數則需要export value 匯出環境變數,取消環境變數則可以使用unset命令。環境變數是可以被子程序繼承的更是可以被子子孫孫都繼承的。環境變數在程式替...