上一講咱們介紹過系統變量和系統自定義變量,本章講解用戶自定義變量。shell
變量命名和文件命名要有描述性,少用縮寫,不要使用相似a="a"無心義變量名稱,根據名稱能夠大體知道變量含義。例如編程
STUDENTNAME="tom" #所有大寫 StudentName="tom" #單詞首字母大寫,駱駝(camel)命名法 studentName="bill"#第二個單詞字母大寫,匈牙利命名法 studentname="green"#所有小寫 student_name="green"#下劃線區分單詞
變量能夠使用單引號雙引號和無引號三種,單引號表示原樣輸出。雙引號先解析語句內命令/變量和轉義符等,完畢後輸出,無引號通常輸出簡單字符串,不包含空格,複雜字符串推薦使用雙引號。vim
[root@promote ~]# CHARS='example text' [root@promote ~]# echo $CHARS example text [root@promote ~]# echo '$CHARS' $CHARS [root@promote ~]# echo "$CHARS" example text [root@promote ~]#
引用命令能夠使用$(command),例如$(ls)。bash
[root@promote ~]# pwd1=$(ls) [root@promote ~]# pwd /root [root@promote ~]# echo $pwd1 anaconda-ks.cfg [root@promote ~]#
$0變量比較特殊,相似還有${n}、$#、$*和$@等,注意觀察,這些變量不符合通常變量命名規則,是特殊變量,稱爲位置參數變量。下面舉例說明${n}用法.net
$演示使用${n}方法,n是>0整數 #建立文件 [root@promote ~]# echo 'echo $1' >>test.sh [root@promote ~]# ls anaconda-ks.cfg test.sh #打印第一個參數 [root@promote ~]# sh test.sh tom tom #截取第二個之後參數 [root@promote ~]# sh test.sh tom bill tom #''做爲一個總體 [root@promote ~]# sh test.sh 'tom bill' tom bill #""做爲一個總體 [root@promote ~]# sh test.sh "tom bill" tom bill [root@promote ~]# [root@promote ~]# echo 'echo $1 $2' >> test.sh [root@promote ~]# cat test.sh echo $1 $2 [root@promote ~]# vim test.sh [root@promote ~]# sh test.sh tom bill tom bill [root@promote ~]# sh test.sh tom tom [root@promote ~]# sh test.sh tom green tom green [root@promote ~]# sh test.sh 'john carry' tom green john carry tom [root@promote ~]# sh test.sh "john carry" tom green john carry tom [root@promote ~]# #推薦使用,大於10不使用{}致使輸出異常 [root@promote ~]# echo 'echo ${1} ${2}' >> test.sh [root@promote ~]# sh test.sh tom #
再看$0使用方法須要和${0}加以區別。code
[root@promote ~]# echo 'echo $0' >>echoA.sh [root@promote ~]# ls anaconda-ks.cfg echoA.sh [root@promote ~]# sh echoA.sh echoA.sh [root@promote ~]# sh /root/echoA.sh /root/echoA.sh [root@promote ~]# dirname /root/echoA.sh /root [root@promote ~]# echo 'echo ${0}' >>echoA.sh [root@promote ~]# sh echoA.sh echoA.sh echoA.sh [root@promote ~]# dirname /root/echoA.sh /root [root@promote ~]# dirname /root/echoA.sh /root [root@promote ~]# #@獲取腳本後參數總數
$?、$$、$!和$_表示狀態變量。進程
$?經常使用,表示上一個命令返回狀態碼,0表示成功,其餘表示失敗,本例爲成功$$獲取當前shell解釋器進程PID,$!獲取上一個shell解釋器進程PID [root@promote ~]# rm -f test.sh [root@promote ~]# echo '#!/bin/sh > echo "number:$#" > echo "filename:$0" > echo "first :$1" > echo "second:$2" > echo "argume:$@" > echo "show parm list:$*" > echo "show process id:$$" > echo "show precomm stat: $?"' >>test.sh [root@promote ~]# sh test.sh number:0 filename:test.sh first : second: argume: show parm list: show process id:20914 show precomm stat: 0 [root@promote ~]# #轉載自跟老男孩學Linux Shell編程實戰 P50 [root@promote ~]# echo '#!/bin/bash > echo $$ >>/tmp/test.pid > sleep 60 '>>testpid.sh [root@promote ~]# cat testpid.sh #!/bin/bash echo $$ >>/tmp/test.pid sleep 60 [root@promote ~]# ps -ef | grep testpid | grep -v grep root 21239 17415 0 18:57 pts/0 00:00:00 bash testpid.sh #&表示後臺執行 [root@promote ~]# bash testpid.sh & [4] 21300 [root@promote ~]#