CentOS 7 Shell腳本編程第四講 Shell 變量續集

上一講咱們介紹過系統變量和系統自定義變量,本章講解用戶自定義變量。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 ~]#
相關文章
相關標籤/搜索