文字顯示變數 Bash程式設計入門 2 Bash變數

2021-10-25 12:50:56 字數 3274 閱讀 5108

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版本為 所有本節講解的內容,都需要你自己動手操作才能明白其...