Linux —— Shell編程之變數賦值和引用__Arduino

來源:互聯網
上載者:User
Linux —— Shell編程之變數賦值和引用

Linux的shell編程是一種非常成熟的程式設計語言,它支援各種類型的變數。有三種主要的變數類型:環境變數、內部變數和使用者變數。 環境變數(environment variable)是系統內容的一部分,不必去定義它們。可以在shell程式中使用它們,某些變數(比如PATH)還能在shell中加以修改。 內部變數(built-in variable)是由系統提供的。與環境變數不同,你不能修改它們。 使用者變數(user variable)是你在編寫shell指令碼時定義的。可以在shell程式內任意使用它們和修改它們。

shell編程和其他程式設計語言的主要不同之處是:在shell編程中,變數是非類型性質的。也就是說,不必指定變數是數字還是字串。 使用者變數

Shell編程中,使用使用者變數無需事先聲明,同時變數名的命名須遵循如下規則:

1). 首個字元必須為字母(a-z,A-Z);
2). 中間不能有空格,可以使用底線(_) ;
3). 不能使用標點符號 ;
4). 不能使用bash裡的關鍵字(可用help命令查看保留關鍵字) 。 變數賦值

變數賦值的格式:

變數名=值 
訪問變數值

要取用一個變數的值,只需在變數名前面加一個$ 。

( ATTENTION: Don't keep blank between the variable with the equal operator '=' ) 舉例

#!/bin/bash
# 對變數賦值:
a="hello world"  #等號兩邊均不能有空格存在

# 列印變數a的值:
echo -e "A is: $a\n"

備忘:

1). bash中變數賦值,等號兩邊均不能有空格存在;

使用自己喜歡的編輯器,輸入上述內容,並儲存為檔案test_hello.bsh,然後執行 chmod +x test_hello.bsh使其具有執行許可權,最後輸入 ./test_hello或bash test_hello.bsh執行該指令碼。

程式運行結果: 

A is: hello world

有時候變數名可能會和其它文字混淆,比如:

num=1
echo "this is the $numst"

上述指令碼並不會輸出"this is the 1st"而是"this is the ";

這是由於shell會去搜尋變數numnd的值,而實際上這個變數並未賦值。

我們可以用花括弧來告訴shell把num變數跟其他部分分開:

num=1
echo "this is the ${num}st"

程式運行結果:

this is the 1st


位置參數

可以編寫一個shell指令碼,當從命令列或者從其他shell指令碼中調用它的時候,這個指令碼接受若干參數。這些選項是通過Linux作為位置參數 (position parameter)提供給shell程式的。位置參數有由系統給出的專用名。存放在變數中的第一個參數名為1(數字1),在程式內可以使用$1來訪問; 存放在變數中的第二個參數名為2,在程式中可以使用$2來訪問,依此類推。在調用shell程式時,可以省略一個或幾個數字大的位置 參數。

例如,如果shell程式mypgm1要求兩個參數(比如名字和姓氏),那麼可以只用一個參數(名字)來調用這個shell程式。但是,你不能只用第二個參數(姓氏)來調用shell程式。    #!/bin/bash   #name display program   if [ $# -eq 0 ]; then       echo "Name not provided."   else       echo "Your name is $1."   fi  
在bash中,可以像下面 這樣執行mypgm1:
# . mypgm1  
那麼會得到下面的輸出:
Name not provided.
但是,如果像下面這樣執行mypgm1:
# . mypgm1 david   那麼會得到下面的輸出:
Your name is david.
shell程式mypgm1還說明了shell編程的另一個方面,即內部變數。在mypgm1中,變數$#是一個內部變數,它提供傳送給這個shell程式的位置參數的數量。
內部變數
內部變數是Linux所提供的一種特殊類型的變數,這類變數在程式中用來作出判斷。在shell程式內這類變數的值是不能修改的。

部分內部變數總結如下:

表 1.1. 常用內部變數

$0 相當於C語言main函數的argv[0]
$1、$2... 這些稱為位置參數(Positional Parameter),相當於C語言main函數的argv[1]、argv[2]...
$# 相當於C語言main函數的argc - 1,注意這裡的#後面不表示注釋
$@ 表示參數列表"$1" "$2" ...,例如可以用在for迴圈中的in後面。
$? 上一條命令的Exit Status
$$ 當前Shell的進程號

為了說明這些變數的用法,這裡有一個叫做mypgm2的示範程式: #!/bin/bash   #my test program   echo "Number of parameter is $#"   echo "Program name is $0"   echo "Parameters as a single string is $*"  


在bash中,如果從命令列上執行mypgm2,如下所示: # . mypgm2 David Victor  


那麼會得到下面的結果: Number of parameters is 2   Program name is mypgm2   Parameters as a single string is David Victor  用知識的力量武裝,把生活的絢爛點亮。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.