【Shell】getopts


許多人寫shell或其他程式喜歡用$0/$1/$2...來取得輸入變數,不過卻有可能造成擴充性與閱讀性的問題。建議使用 getops 來取代 $0/$1來減少擴充與閱讀性的困難。

【目的】

  1. getopts 的使用
  2. shift 的使用
  3. 如何在shell 裡面作算數運算
【程式碼】(存成 opt.sh )
#!/bin/bash
aflag=
bflag=
while getopts ab: name
do
    case $name in
    a)    aflag=1;;
    b)    bflag=1
          bval="$OPTARG";;
    *)    printf "Usage: %s: [-a] [-b value] args\n" $0
          exit 2;;
    esac
done
if [ ! -z "$aflag" ]; then
    printf "Option -a specified\n"
fi
if [ ! -z "$bflag" ]; then
    printf 'Option -b "%s" specified\n' "$bval"
fi
shift $(($OPTIND - 1))
printf "Remaining arguments are: %s\n" "$*"

【結果】

$ ./opt.sh -a -b 123 attachment
Option -a specified
Option -b "123" specified
Remaining arguments are: attachment
$./opt.sh -a -b 123 -c attachment
./opt.sh: illegal option -- c
Usage: ./opt.sh: [-a] [-b value] args

【參考】

【問題】

  • getopt 和 getopts 有何不同?
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com