Linux shell指令碼 (二)shell變數

2021-08-15 19:31:45 字數 2341 閱讀 8350

​ shell支援自定義變數。

定義變數時,變數名不加美元符號($),如:

variablename

="value"

注意,變數名和等號之間不能有空格,這可能和你熟悉的所有程式語言都不一樣。

同時,變數名的命名須遵循如下規則:

變數定義舉例:

myname

="wenong"

mynum

=100

myname

="wenong"

echo

$myname

echo

$

skill

="shell"

echo

"i am good at

$script"

​ 如果不給skill變數加花括號,寫成echo "i am good at $skillscript"當成乙個變數(其值為空),**執行結果就不是我們期望的樣子了。

​ 推薦給所有變數加上花括號,這是個好的程式設計習慣。

​ 已定義的變數,可以被重新定義,如:

myname

="wenong"

echo

$myname

="huang"

echo

$

​ 這樣寫是合法的,但注意,第二次賦值的時候不能寫$myname="huang"使用變數值的時候才加美元符($),負責直接使用變數名。

​ 使用 readonly 命令可以將變數定義為唯讀變數,唯讀變數的值不能被改變。下面的例子嘗試更改唯讀變數,結果報錯:

#!/bin/bash

myname

="wenong"

readonly myname

myname

="huang"

執行指令碼,結果如下:

./test.sh: 行 10: myname: 唯讀變數
​ 使用 unset 命令可以刪除變數。語法:

unset variable_name
​ 變數被刪除後不能再次使用;unset 命令不能刪除唯讀變數。舉個例子:

#!/bin/bash

myname

="wenong"

unset myname

echo

$myname

上面的指令碼沒有任何輸出。

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

1) 區域性變數

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

區域性變數只在建立它們的shell中可用。

where@ubuntu:~$ myname

="wenong"

where@ubuntu:~$ echo myname

myname

where@ubuntu:~$

2) 環境變數

​ 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。可以在建立它們的shell及其派生出來的任意子程序中使用。

where@ubuntu:~$ export

myname_env

="wenong_env"

where@ubuntu:~$ echo

$myname_env

wenong_env

where@ubuntu:~$

​ 環境變數從父程序複製給子程序。

​ shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行

test.sh

#!/bin/sh

myname_sh

="wenong_sh"

export

myname_env_sh

="wenong_env_sh"

./test2.sh

test2.sh

echo

$myname_sh

echo

$myname_env_sh

執行結果:

where@ubuntu:~$ ./test.sh  #直接在test.sh中執行test2.sh能列印出myname_env_sh變數,不能列印出myname_sh變數。

​wenong_env_sh

sh 指令碼語法

介紹 1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編寫指令碼完成時,如果要執行該指令碼,還必須使其可執行。要使編寫指令碼可執行 編譯 chmod x filename 這樣...

sh 指令碼語法

介紹 1 開頭 程式必須以下面的行開始 必須方在檔案的第一行 bin sh 符號 用來告訴系統它後面的引數是用來執行該檔案的程式。在這個例子中我們使用 bin sh來執行程式。當編寫指令碼完成時,如果要執行該指令碼,還必須使其可執行。要使編寫指令碼可執行 編譯 chmod x filename 這樣...

linux shell 之 sh與bash區別

在shell指令碼的開頭往往有一句話來定義使用哪種sh直譯器來解釋指令碼。1 bin sh 2 bin bash 二者區別如下 1.新建test.sh指令碼內容如下 bin sh source pcy.sh pcy.sh並不存在 echo hello 執行.test.sh,螢幕輸出為 test.sh...