本地變量(局部變量) 環境變量 位置變量:$1,$2,$3, ... 特殊變量:$?,$#,$*,$@
那讓腳本擁有獲取外界參數的能力就要用的位置變量,$1代表第一個參數,$2代表第二個參數,依次類推
例:
vartest.sh
#!/bin/bash
#
ONEVAR=$1
TWOVAR=$2
THREEVAR=$3
echo "第一個參數是:${ONEVAR}"
echo "第二個參數是:${TWOVAR}"
echo "第三個參數是:${THREEVAR}"
結果:
[root@iZ28g26851kZ ~]# ./vartest.sh /etc/passwd /etc/inittab /etc/rc.d/
第一個參數是:/etc/passwd
第二個參數是:/etc/inittab
第三個參數是:/etc/rc.d/
[root@iZ28g26851kZ ~]#
這裡再來寫文件是否存在的例子
filetest.sh
#!/bin/bash
#
FILENAME=$1
if [ -e $FILENAME ];then
echo "文件存在"
else
echo "文件不存在"
fi
結果
[root@iZ28g26851kZ ~]# ./filetest.sh /etc/passwd
文件存在
[root@iZ28g26851kZ ~]# ./filetest.sh /etc/passwdasdas
文件不存在
[root@iZ28g26851kZ ~]#
是不是很方便了,,
如果不帶參數會怎麼樣呢,,,
[root@iZ28g26851kZ ~]# ./filetest.sh
文件存在
[root@iZ28g26851kZ ~]#
呵呵,,這就非常尴尬了~~
要是能獲取傳進來的參數的個數就好了,,
這裡就要引入特殊變量了
$?:獲取上一條命令執行的狀態 --這個之前有講過
$#:獲取腳本傳進來的參數的個數 --haha,要的就是這個,有木有
$*:顯示參數的列表
$@:顯示參數的列表
好,再看
filetest.sh
#!/bin/bash
#
if [ $# -lt 1 ];then
echo "Usage:filetest.sh ARG"
exit 6
fi
FILENAME=$1
if [ -e $FILENAME ];then
echo "文件存在"
else
echo "文件不存在"
fi
結果
[root@iZ28g26851kZ ~]# ./filetest.sh
Usage:filetest.sh ARG
[root@iZ28g26851kZ ~]# ./filetest.sh /etc/passwdasdas
文件不存在
[root@iZ28g26851kZ ~]# ./filetest.sh /etc/passwd
文件存在
[root@iZ28g26851kZ ~]#
ok,就是這樣
那麼問題又來了,如果有100個參數,難道我要$1,$2,$3,$4,….這樣引用那就要寫死了,
所以再引入一個命令shift
shift
在腳本中使用shift命令可以將第一個參數“踢出去”,讓第二個參數編程第一個參數,這樣我們只用$1就能引用所有變量了
shifttest.sh
#!/bin/bash
#
echo $1
shift
echo $1
shift
echo $1
結果:
[root@iZ28g26851kZ ~]# ./shifttest.sh asd fsdf 654
asd
fsdf
654
[root@iZ28g26851kZ ~]#
這樣就可以依次取出參數了