歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> linux基礎之shell編程(3)-給腳本設置參數

linux基礎之shell編程(3)-給腳本設置參數

日期:2017/3/1 11:56:21   编辑:SHELL編程

bash的變量類型


本地變量(局部變量)
環境變量
位置變量:$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 ~]#

這樣就可以依次取出參數了

Copyright © Linux教程網 All Rights Reserved