bash提供了某些類似於c語言那樣的程式設計語法,從而允許你用程式設計的方式,來組合使用linux系統。
bash中的變數分為自定義變數,環境變數,位置變數和其他變數。bash中的自定義變數只能儲存文字,即變數型別只能是字串。
1)自定義變數命名規則
2) 變數賦值
bash和c類似,同樣用「=」來表示賦值。給乙個變數賦值實際上就是定義了乙個變狼。比如:
var1=world #注意等號前後不留空格
就是把文字world存入名為var1的變數,即賦值。根據bash的語法,賦值符號「=」的前後不留空格。賦值號右邊的文字內容會存入賦值號左邊的變數。如果文字中包含空格,那麼你可以用單引號或雙引號來包裹文字。比如:
var='abc bcd'
var2="abc bcd" #單雙引號均可
在bash中,我們可以把乙個命令輸出的文字直接賦予給乙個變數:
now=`date` #在這裡,借助反引號,date命令的輸出被賦值給了變數now,也可以用$()來賦值命令的輸出
now=$(date)
echo $now
#如果不加反引號,now就會被賦值成date這個文字
我們還可以把乙個變數中的資料賦值給另乙個變數:
another=$var #變數var被賦值給變數another
3)自定義變數的引用引用變數的時候,要在變數名前加"$"符號,這樣bash才會認出這是乙個變數。比如上文中要把變數var作為echo的引數,就必須這樣寫:
echo $var
在bash中,你還可以在一段文字中嵌入變數。bash也會把變數替換成變數中儲存的文字。比如:
$echo hello$var1 #將列印出helloworld。
在嵌入文字的時候注意,為了避免變數名和尾隨的普通文字混淆,我們也可以換用${}的方式來標識變數。比如說:
echo $varisgood #bash把$varisgod當成了乙個變數,但是這個變數不存在,所以只輸出空行
由於bash中並沒有varisgood這個變數(引用未定義的變數,其值為空),所以bash將列印空白行。但如果將命令改為:
echo $isgood #bash通過${}識別出變數var,並把它替換成資料。最終echo命令列印出worldisgood
單雙引號中引用變數的區別:
echo "hello $var" #雙引號中的變數仍然被識別為變數
echo 'hello $var' #單引號中的變數會被當成普通文字
4)匯出自定義變數為了使變數在其他程序中也可以使用,需要將變數匯出:
export $var
5)環境變數shell維護著一組環境變數,用來記錄特定的系統資訊。比如系統的名稱、登入到系統上的使用者名稱、使用者的系統id(也稱為uid)、使用者預設主目錄以及shell查詢程式的搜尋路徑。
使用set命令顯示乙份完整的當前環境變數列表。env和printenv命令都可以顯示全域性變數。比如$path等
$path
$uid
$home
#以上命令將顯示對應的環境變數的值
6)位置變數位置變數對應於下文介紹的指令碼引數, 其中$0為指令碼名稱, $1為第乙個引數, 依次類推, 引數超過9個必須使用${}引用變數。shell保留這些變數, 不允許使用者以另外的方式定義它們, 傳給指令碼或函式的位置變數是區域性和唯讀的, 而其餘變數為全域性的(可以用local關鍵字宣告為區域性)。
7)其他變數
$?: 儲存前乙個命令的返回碼; 0為執行成功,非0為執行失敗。常用來判斷上乙個程式的退出狀態。
$$: 當前shell的程序號
$!: 上乙個子程序的程序號
$#: 傳給指令碼或函式的引數個數, 即位置變數數減1(1代表指令碼自身)位置變數中,$0是指令碼本身,$1是第乙個引數,依次類推,最多9個。
$*和$@:傳給指令碼的所有引數(不包含指令碼本身), 每個引數以$ifs分隔(一般內為空格tab換行); 兩者的不同點是引號括起來時,$*會被作為乙個整體,$@還是單個的引數。
例子:
ct@ehbio:~$ cat ehbio_testparam.sh
#!/bin/bash
echo "ehbio$great" #顯示ehbio/換行/great
echo '$*' #顯示字串$*,必須是單引號,如果是雙引號則會顯示變數$*
echo -ne "t"; #顯示乙個tab分隔符,分號是命令分隔符,在一行中顯示多個命令
echo $* #顯示傳給指令碼的所有引數,所有引數作為乙個整體
echo '$@'
echo -ne "t";
echo $@ #顯示傳給指令碼的所有引數,每乙個引數作為乙個元素
echo 'each element in $*:'
for i in "$*"; do
echo -ne "t";
echo $i;
done
echo 'each element in $@:'
for i in "$@"; do
echo -ne "t";
echo $i;
done
ct@ehbio:~$ bash ehbio_testparam.sh sheng xin bao dian
ehbio
great
$* sheng xin bao dian
$@ sheng xin bao dian
each element in $*:
sheng xin bao dian
each element in $@:
sheng
xinbao
dian
Shell程式設計(bash變數)
bash變數 一 使用者自定義變數 二 環境變數 三 位置引數變數 四 預定義變數 一使用者自定義變數 變數呼叫 echo 變數名 變數刪除 unset 變數名 二環境變數 環境變數是全域性變數 使用者自定義變數是區域性變數 對系統生效的環境變數名和變數作用是固定的 設定環境變數 export 變數...
shell程式設計 bash變數
bash變數型別 本地變數的作用域為整個bash程序。區域性變數屬於本地變數。在bash中宣告變數的週期隨著該程序的週期而存在。定義本地變數 set varname jerry 引用變數 括號可省略 區域性變數的宣告 local varname value環境變數的作用域為當前shell程序及其子程...
Bash程式設計入門(二)
shell程式設計很有趣,shell程式設計很複雜,shell程式設計離我們很近又似乎很遠 使用linux離不開它,但似乎又不曾仔細了解它。這套文章的目的是帶你走進shell程式設計的大門 領略它的豐富多彩。本節講解內容 本節使用的shell版本為 所有本節講解的內容,都需要你自己動手操作才能明白其...