變數說明:
$$
Shell本身的PID(ProcessID)
$!
Shell最後啟動並執行後台Process的PID
$?
最後啟動並執行命令的結束代碼(傳回值)
$-
使用Set命令設定的Flag一覽
$*
所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。
$@
所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
$#
添加到Shell的參數個數
$0
Shell本身的檔案名稱
$1~$n
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
下面我們來寫一個簡單的指令碼,執行過後再解釋各個變數的意思
# touch variable
# vi variable
1
2 # touch variable# vi variable
指令碼內容如下:
Shell
#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
#!/bin/shecho "number:$#"echo "scname:$0"echo "first :$1"echo "second:$2"echo "argume:$@"
儲存退出
賦予指令碼執行許可權
# chmod +x variable
1 # chmod +x variable
執行指令碼:
# ./variable aa bb
1 # ./variable aa bb
結果:
number:2
scname:./variable
first: aa
second:bb
argume:aa bb
通過顯示結果可以看到:
$# 是傳給指令碼的參數個數
$0 是指令碼本身的名字
$1是傳遞給該shell指令碼的第一個參數
$2是傳遞給該shell指令碼的第二個參數
$@ 是傳給指令碼的所有參數的列表
補充一下關於shell變數
name是變數名,value是變數的值,比如name=zdd,注意,Shell定義變數的時候不需要加$,而使用變數的時候則需要加$,這點和perl是有區別的,perl定義變數的時候也需要$符號。定義變數的時候要注意以下幾點。
•Shell中的變數只能由字母,數字和底線組成,且不能以數字開頭。
•如果變數值中含有空格,應該用引號(單引號雙引號均可)括起,比如 "Hello world"或'Hello world'。
•等號左右都沒有空格。
使用變數
訪問一個變數的時候只要在其前面加一個$即可,比如echo $name,如果不加$,則顯示變數的名字,也就是echo name將顯示name。
陣列變數
Bourne Shell(sh)只支援標量,Korn Shell(ksh)和第二版及更高版本的Bourne Again Shell(bash)都支援陣列變數。
定義數組
為單個元素賦值
name[index]=value
為整個數組賦值
bash
name=(value1 value2... valuen) 各個元素以空格分離。
也可以只為某些元素賦值
name=([0]=value0 [3]=value3 [5]=value5)
ksh
set -A name value1 value2 ... valuen, name是數組名。
使用數組
訪問單個值
${name[index]}
訪問整個數組
${name[*]}
${name[@]} 可以處理包含空格的數組元素,推薦使用。
唯讀變數
定義方法
name=value
readonly name
唯讀變數一旦定義就不可更改其值,也不能用unset刪除。
變數類型
局部變數
在Shell指令碼中由使用者自訂的變數。
環境變數
使用export命令可以查看當前系統的環境變數。
Shell變數
常用的Shell變數有如下這些。
PWD
UID
SHLVL
REPLY
RANDOM
SECONDS
IFS
PATH
HOME
刪除變數
unset name
如何刪除陣列變數?