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