使用getopts处理Shell脚本参数

一、下面的代码,可以通过"./getopts.sh -d 5"的方式获取参数:

 1 #!/bin/sh
 2 #
 3 # File:  getopts.sh
 4 #
 5 usage() {
 6 
 7 }
 8 day=7  #default value
 9 if [ $# -lt 1 ]; then
10     usage
11     exit 1
12 else
13 while getopts ":d:" opt; 
14    do
15      case $opt in
16        d)
17       day=$OPTARG   #get the value
18           ;;
19        ?)
20       echo "How to use: $0 [-d DAY]" >&2    
21           exit 1     
22           ;;
23           :)
24       echo "Option -$OPTARG requires an argument." >&2
25           exit 1     
26           ;;
27     esac
28   done
29 fi
30 echo $day
解释下面的部分:
1 while getopts ":d:" opt; do

第一个冒号表示忽略错误(例如出现了不认识的参数),并在脚本中通过::)来处理这样的错误;字母d则表示,接受参数-d;d后面的冒号表示 参数d接收值,即“-d 7”这样的形式;(这里opt变量,可以在while循环中引用当前找到的参数,试试输出$opt试试)

如果是要有很多参数,那么写法可能是:

1 while getopts ":ixarm:uneh" opt; do
二、
 1 #! /bin/bash
 2 # 测试 getopts 的用法
 3 # 及与位置参数的关系
 4 usage()
 5 {
 6         echo 'basename $0' [-x] [-y] args
 7         exit 0
 8 }
 9 while getopts "xy:" options;do
10         case $options in
11                 x)      echo "you enter -x as an opton";;
12                 y)      echo "you ecter -y as an optin"
13                         echo "\$OPTARG is $OPTARG";;
14                 \?)     usage;;
15         esac
16 done
17 [[ -z $1 ]] && usage
18 index=1
19 for agrs in "$@";do
20         echo \$$index: $agrs
21         (( index ++ ))
22 done

posted on 2012-10-18 10:53  风林幻海  阅读(284)  评论(0编辑  收藏  举报

导航