SHELL腳本-第三課
- 回顧
- 變量和參數介紹
-
- 變量替換
- 變量指派
- Bash變量是無類型
- 特殊變量類型
- 參考資料
回顧
- 對特殊字元有了更多的了解
變量和參數介紹
變量1是腳本程式設計中的如何進行資料表現的辦法。它們可以在算術計算中作為操作數,在一個字元串表達式中作為符号表達抽象的意義或是其他的其它意義。變量是表示計算機記憶體中儲存一種資料需要占的一個位置或一組的位置的辨別。
變量替換
變量的名字是它的值儲存的地方。引用它的值稱為變量替換(variable substitution)。
引用符号:
$
引用方式:
variable="very good!" #“=”左右不能留有空格
echo "${variable}"
其中,在一個雙引号
" "
裡的變量引用不會禁止變量替換。是以雙引号被稱為部分引用,有時也稱為"弱引用"。而在一個單引号裡
' '
的變量替換是被禁止的,變量名隻被解釋為普通的字面意思。是以單引号被稱為"全局引用",有時也被稱為**強引用**。
注意:
$variable
實際上隻是
${variable}
的簡單的簡寫形式。在某些場合使用
$variable
形式會引起錯誤,這時你可能需要使用
${variable}
的形式了。
變量指派
變量指派的符号
=
,該符号為指派操作符(它的左右兩邊不能有空白符)。
指派的特殊使用方法,如下所示:
#!/bin/bash
a=23 #簡單的指派
echo $a
b=$a
echo $b
a=`echo Hello!` #指令替換指派
echo $a
a=`ls -l`
echo $a #如果沒有引号,則會删除多餘tab鍵和空白符
echo
echo "$a" # 加了雙引号,則能夠原樣保留白白符
exit 0
運作結果如下所示:
$ ./4-3-AssignmentVariable.sh
23
23
Hello!
total 8 -r-xr-xr-x 1 sss staff 107 1 8 13:39 4-3-AssignmentVariable.sh drwxr-xr-x 7 sss staff 224 1 7 09:59 Shell
total 8
-r-xr-xr-x 1 sss staff 107 1 8 13:39 4-3-AssignmentVariable.sh
drwxr-xr-x 7 sss staff 224 1 7 09:59 Shell
同樣,用指令替換的另外的格式如下:
R=$(cat /etc/redhat-release)
arch=$(uname -m)
其中,變量指派也可以使用
$(...)
機制(它是比斜引号更新的方法)。
Bash變量是無類型
不同與許多其他的程式設計語言,Bash不以"類型"來區分變量。本質上來說,Bash變量是字元串,但是根據環境的不同,Bash允許變量有整數計算和比較。其中的決定因素是變量的值是不是隻含有數字。
#!/bin/bash
a=2334
let "a += 1" #a = 2335
echo "a = $a"
echo
b=${a/23/BB} #把變量a中的"23"替換為"BB"并賦給變量b
#這使變量$b成為字元串
echo "b = $b"
declare -i b #即使明确地聲明它是整數也沒有用
echo "b = $b"
let "b += 1"
echo "b = $b" #b = 1
echo
exit 0
運作結果如下所示:
$ ./4-4-BashNoClass.sh
a = 2335
b = BB35
b = BB35
b = 1
由上可以看出,Bash中變量沒有明确的資料類型。
特殊變量類型
- 局部變量:局部變量隻在代碼塊或一個函數裡有效。
- 環境變量:這種變量會影響Shell的行為和使用者接口。
- 位置變量:指令行傳遞給腳本的參數是:
,$0
,$1
,$2
. . .。其中,特殊變量$3
和$*
表示所有的位置參數,以及$@
表示傳入腳本的參數個數。例如:$#
#!/bin/bash
#至少以10個參數運作這個腳本,例如:
MINPARAMS=10
echo
echo "The name of this script is \"$0\"."
# 用./表示目前目錄
echo "The name of this script is \"`basename $0`\"."
# 去掉路徑名(檢視'basename'指令)
echo "The name of this script is \"`pwd`\"."
Number=$#
echo "The number of Parameter is ${Number}."
echo
if [ -n "$1" ] # 被測試的變量被雙引号引起
then
echo "Parameter #1 is $1" # 使用引号來使#被轉義
fi
if [ -n "$2" ]
then
echo "Parameter #2 is $2"
fi
if [ -n "$3" ]
then
echo "Parameter #3 is $3"
fi
if [ -n "$4" ]
then
echo "Parameter #4 is $4"
fi
if [ -n "$5" ]
then
echo "Parameter #5 is $5"
fi
if [ -n "$6" ]
then
echo "Parameter #6 is $6"
fi
if [ -n "$7" ]
then
echo "Parameter #7 is $7"
fi
if [ -n "$8" ]
then
echo "Parameter #8 is $8"
fi
if [ -n "$9" ]
then
echo "Parameter #9 is $9"
fi
if [ -n "${10}" ]
then
echo "Parameter #10 is ${10}"
fi
echo "-----------------------------------"
echo "All the command-line parameters are: "$*""
if [ $# -lt "$MINPARAMS" ]
then
echo
echo "This script needs at least $MINPARAMS command-line arguments!"
fi
echo
exit 0
運作結果如下所示:
$ ./4-5-PointParameter.sh 1 2 3 4 5 6 7 8 9 10
The name of this script is “./4-5-PointParameter.sh”.
The name of this script is “4-5-PointParameter.sh”.
The name of this script is “/Users/sss/Shell”.
The number of Parameter is 10.
Parameter #1 is 1
Parameter #2 is 2
Parameter #3 is 3
Parameter #4 is 4
Parameter #5 is 5
Parameter #6 is 6
Parameter #7 is 7
Parameter #8 is 8
Parameter #9 is 9
Parameter #10 is 10
‘-----------------------------------’
All the command-line parameters are: 1 2 3 4 5 6 7 8 9 10
其中,可再多了解一下
shift
的使用方法2,或許以後會有用。
參考資料
- shell腳本手冊 ↩︎
- Linux shell腳本中shift的用法說明 ↩︎