bash中的命令行参数

Command line arguments in Bash

本问题已经有最佳答案,请猛点这里访问。

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

1
my_bash_script -p 2 -l 5 -t 20

因此,值2应该保存在一个称为pages的变量中,参数l应该保存在一个称为length的变量中,值20应该保存在一个可变的时间中。

最好的方法是什么?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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, ...


有点像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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