shell學習筆記-變量

變量分類

hello world

#!/bin/bash

# hello world

echo "what' s your name ?"
#read 命令從 stdin 獲取輸入並賦值給 PERSON 變量,最後在 stdout 上輸出
read name 
echo "My name is $name"

普通變量

定義變量

定義變量時,變量名不加美圓符號($),如:shell

variableName="value"

變量的定義規則:segmentfault

  1. 變量名和等號之間不能有空格bash

  2. 首個字符必須爲字母(a-z,A-Z)。函數

  3. 中間不能有空格,可使用下劃線(_)。url

  4. 不能使用標點符號。spa

  5. 不能使用 bash 裏的關鍵字(可用 help 命令查看保留關鍵字)code

使用變量

使用一個定義過的變量,只要在變量名前面加美圓符號($)便可,如:blog

your_name=「weixuan」
echo $your_name
echo ${your_name}

變量名外面的花括號是可選的,加不加都行,加花括號是爲了幫助解釋器識別變量的邊界進程

從新定義變量

已定義的變量,能夠被從新定義,如:ip

myUrl="http://segmentfault.com/"
echo ${myUrl}
myUrl="http://segmentfault.com/questions/newest"
echo ${myUrl}

只讀變量

使用 readonly 命令能夠將變量定義爲只讀變量,只讀變量的值不能被改變

#!/bin/bash

url="http://segmentfault.com/questions/newest"

readonly url

url="http://segmentfault.com/"

報錯:

[root@iZ285svxip6Z shell]# ./myshell.sh 
./myshell.sh: line 7: url: readonly variable

刪除變量

使用 unset 命令能夠刪除變量。語法:

unset variable_name

變量被刪除後不能再次使用;unset 命令不能刪除只讀變量。

變量類型

  1. 局部變量
    局部變量在腳本或命令中定義,僅在當前 shell 實例中有效,其餘 shell 啓動的程序不能訪問局部變量。

  2. 環境變量
    全部的程序,包括 shell 啓動的程序,都能訪問環境變量,有些程序須要環境變量來保證其正常運行。必要的時候 shell 腳本也能夠定義環境變量。

  3. shell 變量

  4. 變量是由 shell 程序設置的特殊變量。shell 變量中有一部分是環境變量,有一部分是局部變量,這些變量保證了 shell 的正常運行

特殊變量

特殊變量表

變量 含義
$0 當前腳本的文件名
$n 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$# 傳遞給腳本或函數的參數個數。
$* 傳遞給腳本或函數的全部參數。
$@ 傳遞給腳本或函數的全部參數。被雙引號(" ")包含時,與 $* 稍有不一樣,下面將會講到。
$? 上個命令的退出狀態,或函數的返回值。
$$ 當前 Shell 進程 ID。對於 Shell 腳本,就是這些腳本所在的進程 ID。

示例代碼

#!/bin/bash

echo "File name : $0"

echo "First param : $1"

echo "second param : $2"

echo "quoted values : $@"

echo "quoted values 2 : $*"

echo "Total number of params : $#"

echo "shell id : $$"

-----------------------------------------

運行結果:

[root@iZ285svxip6Z shell]# ./demo.sh weixuan nicholas
File name : ./demo.sh
First param : weixuan
second param : nicholas
quoted values : weixuan nicholas
quoted values 2 : weixuan nicholas
Total number of params : 2
shell id : 3094

$* 和$@ 的區別

$*$@ 都表示傳遞給函數或腳本的全部參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出全部參數。

可是當它們被雙引號(" ")包含時,"$*" 會將全部的參數做爲一個總體,以"$1 $2 … $n"的形式輸出全部參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出全部參數。

退出狀態

$?能夠獲取上一個命令的退出狀態。所謂退出狀態,就是上一個命令執行後的返回結果。

退出狀態是一個數字,通常狀況下,大部分命令執行成功會返回0,失敗返回1。

替換

轉義

-e 表示對轉義字符進行替換。若是不使用 -e選項,將會原樣輸出

demo

#!/bin/bash

name="weixuan"

echo -e "My name is $name \n"

echo "My name is $name \n"

----------------------------

結果

My name is weixuan 

My name is weixuan \n

echo 命令的 -E 選項禁止轉義,默認也是不轉義的。

shell命令替換

shell命令替換是指能夠先執行命令,將輸出結果暫時保存,在適當的地方輸出。
命令替換的語法: `command` 注意是反引號

#!/bin/bash

# 等於執行shell命令date,將date的值保存給變量DATE

DATE=`date`

echo "The Date is $DATE"

USERS=`who | wc -l`

echo "Logged in user are $USERS"

UP=`date;uptime`

echo "Uptime is $UP"

-------------------------

結果:

The Date is Mon Oct 12 13:22:54 CST 2015
Logged in user are 1
Uptime is Mon Oct 12 13:22:54 CST 2015
 13:22:54 up 16 days, 21:16,  1 user,  load average: 0.00, 0.00, 0.00

變量替換

變量替換能夠根據變量的狀態(是否爲空、是否認義等)來改變它的值。

形式 說明
${var} 變量原本的值
${var:-word} 若是變量 var 爲空或已被刪除(unset),那麼返回 word,但不改變 var 的值
${var:=word} 若是變量 var 爲空或已被刪除(unset),那麼返回 word,並將 var 的值設置爲 word。
${var:?message} 若是變量 var 爲空或已被刪除(unset),那麼將消息 message 送到標 準錯誤輸出,能夠用來檢測變量 var 是否能夠被正常賦值。若此替換出如今 Shell 腳本中,那麼腳本將中止運行。
${var:+word} 若是變量 var 被定義,那麼返回 word,但不改變 var 的值

demo

#!/bin/bash

# 輸出變量var 的自己的值,沒有定義 ,那麼返回word,不會改變var自己的值
echo ${var:-"value is not set"}
echo "1 - value of var is ${var}"

# var沒有定義,返回word,並將var的值設爲word
echo ${var:="value is not set"}
echo "2 - value of var is ${var}"

# var被定義,返回word,不改變var的值
var="weixuan"
echo ${var:+"my name is not weixuan"}
echo "3 - value of var is ${var}"

#var被刪除,打印messqge,同時退出shell
unset var
echo ${var:?"Error"}
echo "4 - value of var is ${var}"

-----------------------
結果:

value is not set
1 - value of var is 
value is not set
2 - value of var is value is not set
my name is not weixuan
3 - value of var is weixuan
./demo4.sh: line 18: var: Error
相關文章
相關標籤/搜索