linux基础之shell编程(3)-给脚本设置参数
2016-05-09 16:50
260 查看
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 ~]#
这样就可以依次取出参数了
相关文章推荐
- Shell if...elif...fi 语句
- 如何在shell中判断一个文件是否为空
- linux基础之shell编程(2)-条件判断,算数运算,测试
- linux bash的$ !
- -bash: ssh: command not found
- paste,两个文件相同行拼接在一起的shell命令
- Android adb shell 报错:more than one device and emulator
- 防DDOS攻击SHELL脚本
- shell笔记
- Android 代码执行Linux Shell小记
- MySQL 自动备份 Shell 脚本
- sed命令详解
- 重复调用ab命令的shell代码和整理ab结果的java代码
- [sh]shell案例
- Shell脚本学习笔记-循环结构
- Linux学习之shell基础
- 玩转变量、环境变量以及数学运算(shell)
- shell学习(二)变量
- shell学习(三)运算符
- erlang shell清屏命令