變量賦值,一般的和比較特殊的:
# Simple case
a=23
echo $a
b=$a
echo $b
[root@ www.linuxidc.com ~]# a=`echo Hello!`
-bash: !`: event not found
注意,如果在命令擴展結構中使用一個(!)的話,在命令行中將不能工作,因為這觸發了 Bash的"歷史機制".
a=`ls -l` # 把ls -l 的結果給 a
echo $a # 別忘了,這麼引用的話,ls 的結果中的所有空白部分都沒(包括換行)
echo "$a" # 這麼引用就正常了,保留了空白
使用$(...)機制進行的變量賦值(除去使用``來賦值的另外一種新方法). 事實上這兩種方法都是
命令替換的一種形式.
[root@ www.linuxidc.com ~]# a=2334
[root@ www.linuxidc.com ~]# let "a += 1"
[root@ www.linuxidc.com ~]# echo "a=$a"
a=2335
[root@ www.linuxidc.com ~]# b=${a/23/BB} # 將23替換成BB
[root@ www.linuxidc.com ~]# echo "b=$b"
b=BB35
空變量會怎樣:
[root@ www.linuxidc.com ~]# e=""
[root@ www.linuxidc.com ~]# echo "e=$e"
e=
[root@ www.linuxidc.com ~]# let "e+=1"
[root@ www.linuxidc.com ~]# echo "e=$e"
e=1
[root@ www.linuxidc.com ~]# echo "e=$e"
e=1
[root@ www.linuxidc.com ~]# let "e+=1"
[root@ www.linuxidc.com ~]# echo "e=$e"
e=2
未聲明變量會怎樣:
[root@ www.linuxidc.com ~]# echo "f=$f"
f=
[root@ www.linuxidc.com ~]# let "f+=1"
[root@ www.linuxidc.com ~]# echo "f=$f"
f=1
如果一個腳本設置了環境變量,需要export 它,來通知本腳本的環境,這是export命令的功能。腳本只能對它產生的子進程export 變量.一個從命令行被調用的腳本export 的變量,將不能影響調用這個腳本的那個命令行shell 的環境.
位置變量:
就是從命令行中傳進來的參數,$0, $1, $2, $3...
$0就是腳本文件的名字,$1 是第一個參數,$2 為第2 個...,參見[1]( 有$0的說明),$9以後就需要打括號了,如${10},${11},${12}...
兩個值得注意的變量$*和$@, 表示所有的位置參數.