歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

linux基礎之shell編程(3)

bash的變量類型

[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

shift

在腳本中使用shift命令可以將第一個參數“踢出去”,讓第二個參數編程第一個參數,這樣我們只用$1就能引用所有變量了shifttest.sh

[code]#!/bin/bash
#
echo $1
shift
echo $1
shift
echo $1
結果:

[code][root@iZ28g26851kZ ~]# ./shifttest.sh  asd fsdf 654
asd
fsdf
654
[root@iZ28g26851kZ ~]#
這樣就可以依次取出參數了

Copyright © Linux教程網 All Rights Reserved