阅读背景:

linux基础之shell编程(3)-给脚本设置参数

来源:互联网 

bash的变量类型


本地变量(局部变量)
环境变量
地位变量:
          

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 ~]#

这样便可以够顺次取出参数了

,,, ... 特别变量:$?,$#,$*,$@ 本地变量(局部变量) 环境变量 地位变量:

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 ~]#

这样便可以够顺次取出参数了

,,, ... 特别




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: