自定義變量
$ cat variable_scope.sh
#!/bin/sh
echo $a
a=2
echo $a
$ chmod a+x variable_scope.sh
$ a=1
$ ./variable_scope.sh
2
$ echo $a
1
在派生的進(jìn)程中,$a
原本不存在战授,所以最開(kāi)始打印的為空砍聊,在shell腳本執(zhí)行完畢后進(jìn)程結(jié)束背稼,派生進(jìn)程中的$a
被銷毀,也不會(huì)影響到原shell中的$a
玻蝌。
$ a=1
$ export a
$ ./variable_scope.sh
1
2
$ echo $a
1
export a
會(huì)在派生進(jìn)程時(shí)蟹肘,制作一個(gè)a
的副本,所以$a
最開(kāi)始是存在的俯树,但是在新進(jìn)程中對(duì)變量的修改不會(huì)影響到原來(lái)的變量帘腹。
$ a=1
$ source ./variable_scope.sh
1
2
$ echo $a
2
source
會(huì)使用本地的進(jìn)程運(yùn)行shell腳本,所以a
在最開(kāi)始是存在的许饿,同時(shí)對(duì)a
的修改也會(huì)影響到本地的a
內(nèi)建變量
當(dāng)運(yùn)行cmd.sh arg1 arg2 arg3
時(shí)阳欲,有一些內(nèi)建的變量會(huì)自動(dòng)設(shè)置
-
$0: cmd.sh
,程序名 -
$1: arg1
米辐,第一個(gè)參數(shù) -
$2: arg2
胸完,第二個(gè)參數(shù) -
$3: arg3
,第三個(gè)參數(shù) -
$#: 3
翘贮,參數(shù)列表元素個(gè)數(shù) -
$@: arg1 arg2 arg3
赊窥,所有參數(shù) -
$*
,忽略"
后解析出的所有參數(shù) -
shift
狸页,移除參數(shù)列表的第一個(gè)參數(shù)
$?
锨能,上一個(gè)命令的退出值,正常退出為0
$$
芍耘,當(dāng)前運(yùn)行shell的PID
$!
址遇,上一個(gè)后臺(tái)運(yùn)行的命令的PID
IFS
,中間字段分隔符
#!/bin/sh
old_IFS="$IFS"
IFS=:
echo "Please input some data separated by colons(:) ..."
read x y z
IFS=$old_IFS
echo "x is $x y is $y z is $z"
默認(rèn)值
-
:-
斋竞,變量為null時(shí)使用默認(rèn)值 -
:=
倔约,變量未定義時(shí)使用默認(rèn)值
$ # 變量為null
$ a=""
$ echo ${a:-loki}
loki
$ # 變量未定義
$ echo ${b:=maomi}
maomi