码迷,mamicode.com
首页 > 其他好文 > 详细

Shell 获取参数的方式

时间:2014-08-17 19:48:42      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   使用   os   io   strong   for   

 

Shell 获取参数的方式

写shell脚本的时候,往往需要从外部获取参数,例如:

$ sh demo.sh a

那么如何将上面的参数a传到shell程序里面呢。
最常用的是,$0 $1... $10,这些位置变量 其中$0是shell程序的名字,$1,$2...分别为第一个参数,第二个参数... 我们demo.sh 如下所示:

$ cat demo.sh
#! /bin/bash

cat << EOF
     Usage: sh $0 $1
EOF

$ sh demo.sh a
 Usage: sh demo.sh a

$开头的参数有:

$0: 程序的名字
$#: 变量的个数
$@:所有的变量,即:$1...$最后,不包括程序的名字

这有一个问题,当参数很多的时候,别人用你的程序时,交互性不是很好,别人还得记住脚本每一个参数的位置和作用,会很麻烦。这时可以加提示符:例如

$ sh demo.sh -a A -b B -c C 

那这个怎么实现呢? 实现的方式有两种 利用shiftgetopts

$ cat demo.sh 
#! /bin/bash

while [ $# -gt 0 ];
do
   case $1 in
   -a) echo "-a----$2"
       shift
       ;;
   -b) echo "-b----$2"
       shift
       ;;
   -c) echo "-c----$2"
       shift
       ;;
   esac
   shift
done

$ sh demo.sh -a A -b B -c C
-a----A
-b----B
-c----C

getopts函数则简化上面的选项处理过程。我们下面来看看它的使用方法。
函数的第一个参数:合法选项字母的一个字符串, 如果字母后面后·:则表示必须要提供参数,这时getopts函数会将参数放到OPTARG中,另外一个变量是OPTIND代表下一个待处理参数的索引值。
函数的第二个参数:变量名称,每次getopts被调用的时候,都会被更新,这个变量名字是没有限制的。getopts在找不到合法的选项的时候会将这个变量设置为一个问号。具体的实现如下所示:

#! /bin/bash
while getopts a:b:c: opt;
do
case $opt in
a) echo "-a ---- $OPTARG"
   ;;
b) echo "-b ---- $OPTARG"
   ;;
c) echo "-c ---- $OPTARG"
   ;;
?) echo "$opt is an invalid option"
   ;;
esac
done

$ sh demo.sh -a A -b B -c C -d
-a ---- A
-b ---- B
-c ---- C
demo.sh: illegal option -- d      --getopts输出的错误信息
? is an invalid option            --脚本判断输出的错误信息,这里将-d option设置为了? 

但是getopts并不能处理长选项,这时可以借助getopt,大家可以man一下:

NAME
getopt - parse command options (enhanced)

从基本解释可以看出,它是一个加强版的getopts,虽然getopts比它还多了一个s,但是论功力,还是远远不如getopt

 

 

Shell 获取参数的方式,布布扣,bubuko.com

Shell 获取参数的方式

标签:style   http   color   使用   os   io   strong   for   

原文地址:http://www.cnblogs.com/zk47/p/3918086.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!