shell支援自定義變數。
定義變數時,變數名不加美元符號($),如:
variablename注意,變數名和等號之間不能有空格,這可能和你熟悉的所有程式語言都不一樣。="value"
同時,變數名的命名須遵循如下規則:
變數定義舉例:
myname="wenong"
mynum
=100
myname="wenong"
echo
$myname
echo
$
skill 如果不給skill變數加花括號,寫成="shell"
echo
"i am good at
$script"
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/shmyname_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...