web-dev-qa-db-fra.com

Arguments de ligne de commande dans Bash

Je veux écrire un script bash qui prend différents arguments. Il devrait être utilisé comme un programme de console Linux normal:

my_bash_script -p 2 -l 5 -t 20

Donc, la valeur 2 doit être enregistrée dans une variable appelée pages et le paramètre l doit être enregistré dans une variable appelée longueur et la valeur 20 doit être enregistrée dans un temps variable.

Quelle est la meilleure façon de procéder?

69
Pascal

Utilisez le getopts intégré:
voici un tutoriel

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)) décale les paramètres de ligne de commande afin que vous puissiez accéder aux arguments possibles de votre script, c'est-à-dire $1, $2, ...

124
Theodros Zelleke

Quelque chose dans le sens de

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
11
Jo So