bash的变量类型
本地变量(局部变量)
环境变量
位置变量:$1,$2,$3, ...
特殊变量:$?,$#,$*,[email protected]
那让脚本拥有获取外界参数的能力就要用的位置变量,$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,要的就是这个,有木有
$*:显示参数的列表
[email protected]:显示参数的列表
好,再看
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 ~]#
这样就可以依次取出参数了
时间: 2024-10-10 01:20:09