Shell教程(二):變數、特殊變數_Shell

來源:互聯網
上載者:User

變數是一個字串,我們分配一個值。分配的值可以是一個數字,文本,檔案名稱,裝置,或任何其他類型的資料。

變數是沒有超過實際資料的指標。 shell,可以建立,分配和刪除變數。 變數名:

變數的名稱可以包含只有字母(a到z或A到Z),數字(0〜9)或底線(_)。

按照慣例,UNIX的shell變數將有自己的名稱以大寫字母。

下面的例子是有效變數名:

_ALI
TOKEN_A
VAR_1
VAR_2

以下是無效的變數名的例子:

2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!

不能使用其他字元,如。,*或 - 這些字元有特殊含義。 定義變數:

變數定義如下:

variable_name=variable_value

例如:

NAME="Zara Ali"

上面的例子中定義的變數名和分配值“Zara Ali”。這種類型的變數被稱為標量變數。一個標量變數只能容納一個值一次。

shell可以儲存任何你想在一個變數的值。例如:

VAR1="Zara Ali"
VAR2=100
訪問值:

為了訪問儲存在一個變數的值,它的名字的首碼為貨幣符號($):

例如,下面的指令碼將訪問的價值定義的變數名,將它列印在標準輸出:

#!/bin/sh
 
NAME="Zara Ali"
echo $NAME

這將產生以下值:

Zara Ali
唯讀變數:

shell提供了一種標記為唯讀變數使用的唯讀命令。後一個變數被標記為唯讀,它的值不能被改變。

例如,下面的指令碼將給出錯誤提示,同時試圖改變NAME的值: 

#!/bin/sh
 
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"

這個結果將產生以下如下:

/bin/sh: NAME: This variable is read only.
取消設定變數:

登出或刪除的變數告訴shell刪除的變數的變數列表做了跟蹤。一旦您取消設定變數,你不可以訪問儲存在變數值。

以下是使用unset命令定義一個變數的文法:

unset variable_name

上面的命令將取消設定定義的變數值。下面是一個簡單的例子:

#!/bin/sh
 
NAME="Zara Ali"
unset NAME
echo $NAME

上面的例子會不會列印出任何東西。不能使用unset命令取消定義的變數沒有被標記為唯讀。 變數類型:

當一個shell運行,存在三種主要類型的變數:

·        局部變數: 局部變數是一個變數所做的是在當前執行個體中的shell。這不是程式由shell開始。在命令提示字元下設定。

·        環境變數: 環境變數是一個變數所做的是任何子進程的shell。有些程式需要以正常的環境變數。通常一個shell指令碼定義,只有那些環境變數所需要的程式沒有運行。

·        Shell 變數: shell變數是一個特殊的變數,由shell設定,也是shell正常需要。一些合成變數環境變數,而其他局部變數。

 

 

以前的教程中說過有關在變數名中使用某些非字母數字字元。這是因為這些字元中使用特殊的Unix變數的名稱。這些變數被保留用於特定功能。

例如,$字元表示進程ID號,或PID,在當前shell:

$echo $$

上面的命令將寫入在當前shell的PID:

29949

以下下表顯示了一些特殊的變數,你可以在你的shell指令碼中使用:

變數

描述

$0

The filename of the current script.

$n

These variables correspond to the arguments with which a script was invoked. Here n is a positive decimal number corresponding to the position of an argument (the first argument is $1, the second argument is $2, and so on).

$#

The number of arguments supplied to a script.

$*

All the arguments are double quoted. If a script receives two arguments, $* is equivalent to $1 $2.

$@

All the arguments are individually double quoted. If a script receives two arguments, $@ is equivalent to $1 $2.

$?

The exit status of the last command executed.

$$

The process number of the current shell. For shell scripts, this is the process ID under which they are executing.

$!

The process number of the last background command. 命令列參數:

該命令列參數 $1, $2, $3,...$9 是位置參數,與0美元指向實際的命令,程式,shell指令碼,函數和 $1, $2, $3,...$9 作為參數的命令。

下面的指令碼使用命令列相關的各種特殊變數:

#!/bin/sh
 
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"

下面是一個樣本運行上面的指令碼:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
特殊參數$ *和$ @:

有特殊的參數,允許在一次訪問所有的命令列參數。 $ *和$ @都將相同的行動,除非它們被括在雙引號“”。

這兩個參數指定的命令列參數,但“$ *”特殊參數需要整個列表作為一個參數之間用空格和“$ @”特殊參數需要整個列表,將其分為不同的參數。

我們可以寫下面所示的命令列參數處理數目不詳的$ *$ @特殊參數的shell指令碼:

#!/bin/sh
 
for TOKEN in $*
do
   echo $TOKEN
done

有一個例子運行上面的指令碼:

$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old

註:在這裡 do...done是一種迴圈,在以後的教程中,我們將涵蓋。 退出狀態:

 $? 變數表示前一個命令的退出狀態。

退出狀態是一個數值,完成後返回的每一個命令。作為一項規則,大多數命令返回,如果他們不成功退出狀態為0,如果他們是成功的。

一些命令返回其他特殊退出狀態。例如,一些命令區分類型的錯誤,並且將返回各種退出值取決於特定類型失效。

成功的命令如下面的例子:

$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
$echo $?
0
$

 

 

shell變數是有足夠的能力保持一個單一的值。這種類型的變數被稱為標量變數。

Shell支援不同類型的變數稱為陣列變數,可以在同一時間容納多個值。陣列,提供了一組變數進行分組的方法的。而不是建立一個新的名稱為每個變數所需要的,你可以使用一個單一的陣列儲存所有其他變數的變數。

所有討論shell變數的命名規則將適用數組命名。


from: http://www.yiibai.com/shell/what_is_shell.html#

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.