既然是變量,自然分變量名和變量值,在使用的時候一定要注意哪些地方需要用變量名,哪些地方需要用變量的值。
自定義變量
shell變量不需要聲明,隨用隨定義,給變量賦值的時候要注意
- shell是空格敏感的
- 使用
{}
確定變量的范圍是個好習慣
$NEWENV =123 #等號前面有空格,不行
NEWENV: command not found
$NEWENV= 123 #等號后面有空格,不行
123: command not found
$NEWENV=123 #RIGHT
$BRACE=123
$echo $BRACEEEE
$echo ${BRACE}EEE
123EEE
位置變量
指shell腳本的命令參數,shell script將執行的命令放在存儲在0
,命令之后的參數依次存儲在1
,2
...,可以通過取值(eg$0
)利用這些變量,就可以編寫帶參數的腳本,當參數值大於9時,需要使用{}括起來,否則$10
就相當於在$1
之后加了字符0
。注意,定義函數的參數列表也使用$1
, $2
etc,注意與命令行的參數相區分,函數內的$1
etc是用來傳參的,但$0
還是保持原來的含義
$cat ./shell.sh
#!/bin/bash
echo "$10"
echo "${10}"
$./*.sh 11 22 33 44 55 66 77 88 99 00
110
00
內嵌變量
#
目前進程的參數個數,可以通過$#
獲得其值,多用在循環中
while [ $# != 0 ]
do
case $1 in
...
esac
shift
done
@
傳遞給當前進程的命令行參數,如果置於雙引號內,會展開為個別的參數, $@
代表命令后接的每一個參數字符串,類似"$1
", "$2
", "$3
". 否則和$*
都是一樣的。
*
當前進程的命令行參數,$*
代表命令后接的參數的集合字符串,類似"$1c$2c$3
", c為分隔符,默認為空格鍵,加上" "
表示一個字符串,不加和$@
一樣, 這兩個參數可以用來將參數傳遞給其他腳本或函數
$cat ./shell.sh
#!/bin/bash
my(){
echo $#
}
echo "$(my $@)"
echo "$(my "$@")"
echo "$(my $*)"
echo "$(my "$*")"
$./*.sh 11 "22 33" 44
4
3
4
1
-
在引用時給予shell的選項
?
- 前一個命令的退出狀態,
$?
IMPORTANT,只和上一條命令有關 - 如果上一條命令的執行成功,里面的值是0,否則里面的值是一個正數
- 上一條test語句的返回結果,如果test結果為真,則為0,如果test結果為假,則為1
- shell的函數的返回值只能使用
$?
接收
$
shell的進程編號(PID),可以通過$$
獲得其值
$echo $$
3730
!
最近一個后台命令的進程編號,以此方式存儲進程編號,即在終端中的histroy命令,可通過wait供之后使用
環境變量
我們所執行的任何一個程序,都是由父進程fork出來的一個子進程,子進程結束之后,將返回發哦父進程中去,當子進程被產生的時候,將會從父進程那里獲得一定的資源分配,以及(更重要的是)繼承父進程的環境。環境變量就是傳遞給子進程的變量,"遺傳性"是區分本地變量和環境變量的決定性指針,環境變量只能從父進程到子進程單向繼承,換句話說,在子進程中的環境如何變更,均不會影響父進程的環境。下面是幾個比較常用的缺省繼承環境變量的值,當前終端下更多環境變量的值可以使用export -p
查看
ENV
一般引用則僅用於交互式shell中,展開為讀取和啟動時要執行的第一個文件的完整路徑名稱
HOME
表示家目錄
IPS
分隔符,默認為空格,tab和換行
LINENO
剛執行過的行在腳本或函數的行編號
PPID
父進程的PID
PS1
主要的命令提示符,默認是$
PS2
行繼續的命令提示符,默認是>
PS4
set +x 設置的執行跟蹤的提示字符串,默認是+
PWD
當前的工作目錄
$echo $LANG
en_AU.UTF-8
$echo "$LINENO"
8
$echo "$PATH"
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/linux/toolchain/gcc-4.6.4/bin:.
$echo "$PPID"
2647
$ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
linux 2647 0.0 2.2 110152 11540 ? Rl 07:51 0:01 gnome-terminal
$echo "$PWD"
/home/linux
數組
shell使用形如arr=(var1 var2...)
的形式定義,即元素使用空格分開,使用${arr[n]}
訪問數組編號為n的元素
$arr=(0 1 2 var)
$echo "${arr[0]}"
0
$echo "${arr[3]}"
var
我們也可以對元素進行單獨賦值
$arr[3]=qq
$echo "${arr[3]}"
qq
顯示數組的所有元素
$echo "${arr[@]}"
0 1 2 qq
$echo "${arr[*]}"
0 1 2 qq
顯示數組中元素的個數
$echo "${#arr[@]}"
4
$echo "${#arr[*]}"
4