78

我想编写一个带有不同参数的 bash 脚本。它应该像普通的 linux 控制台程序一样使用:

my_bash_script -p 2 -l 5 -t 20

因此,值 2 应保存在名为 pages 的变量中,参数 l 应保存在名为 length 的变量中,值 20 应保存在变量 time 中。

做这个的最好方式是什么?

4

2 回答 2

128

使用getopts内置:
这里有一个教程

pages=  length=  time=

while getopts p:l:t: opt; do
  case $opt in
  p)
      pages=$OPTARG
      ;;
  l)
      length=$OPTARG
      ;;
  t)
      time=$OPTARG
      ;;
  esac
done

shift $((OPTIND - 1))

shift $((OPTIND - 1))转换命令行参数,以便您可以访问脚本的可能参数,即$1, $2, ...

于 2012-08-20T11:08:07.160 回答
12

类似的东西

pages=
length=
time=

while test $# -gt 0
do
    case $1 in
        -p)
            pages=$2
            shift
            ;;
        -l)
            length=$2
            shift
            ;;
        -t)
            time=$2
            shift
            ;;
        *)
            echo >&2 "Invalid argument: $1"
            ;;
    esac
    shift
done
于 2012-08-20T11:07:34.163 回答