Script shell permettant de passer plusieurs arguments avec des options en ligne de commande


3

J'ai le script, j'ai besoin d'exécuter ce script comme ceci:

./create_endpoint.sh --controller-ip 10.20.20.1 --controller-name User1.

Mais son exécution comme ceci:

./create_endpoint.sh 10.20.20.1 User1

Le scénario:

CONTROLLER_IP=""
CONTROLLER_NAME=""
if [ "$#" -eq 2 ]
  then
    CONTROLLER_IP=$1
    CONTROLLER_NAME=$2
  else
    echo "Usage : create_endpoint.sh --controller-ip <Controller IP> --controller-name"
    exit 1  
fi
echo $CONTROLLER_IP
echo $CONTROLLER_NAME

Réponses:


5

Je pense que l'utilisation getoptsest une meilleure solution pour une utilisation anticipée, lorsque vous avez besoin de flexibilité sur le nombre d'arguments transmis.

Ceci est un exemple de travail:

if (($# == 0)); then
  echo "Please pass argumensts -p <pkg1><pkg2>... -m <email1><email2>.."
  exit 2
fi
while getopts ":p:m:" opt; do
  case $opt in
    p)
      echo "-p was triggered, Parameter: $OPTARG" >&2
      PKGS=$OPTARG
      ;;
    m)
      echo "-m was triggered, Parameter: $OPTARG" >&2
      MAIL=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done
echo "go thru selection"
for PKG in $PKGS;
do
 echo "ARG_PKG: $PKG"
done
echo "go thru selection email"
for M in $MAIL;
do
 echo "ARG_MAIL: $M"
done
exit 0

réf .. http://wiki.bash-hackers.org/howto/getopts_tutorial

SORTIE:

bash t -p "pkg1 pkg2 pkg3" -m "bobo@m.com boba@m.com"
-p was triggered, Parameter: pkg1 pkg2 pkg3
-m was triggered, Parameter: bobo@m.com boba@m.com
go thru selection
ARG_PKG: pkg1
ARG_PKG: pkg2
ARG_PKG: pkg3
go thru selection email
ARG_MAIL: bobo@m.com
ARG_MAIL: boba@m.com

0

En fait, les drapeaux --controller-ipet les --controller-namecomptes dans la liste des arguments aussi.

Vous devriez plutôt accéder aux arguments avec $2et $4et, bien sûr, vérifier l'argument avant de vérifier que vous affectez la bonne variable.


0

Faites-moi savoir si vous cherchez ceci

Scénario:

[[ "$#" -ne 4 ]] && { echo "Usage : create_endpoint.sh --controller-ip <Controller IP> --controller-name"; exit 1; }
[[ "$1" = "--controller-ip" ]] &&  CONTROLLER_IP=$2
[[ "$3" = "--controller-name" ]] &&  CONTROLLER_NAME=$4

echo $CONTROLLER_IP
echo $CONTROLLER_NAME

oui, comme ci-dessus. Peux-tu donner quelques exemples. Parfois, je passe un argument ou trois arguments en fonction de l'exigence. comment puis-je valider et exécuter
Débutant

si aucun argument ne varie, vérifiez le $ # -ge 2. Vérifiez ensuite les valeurs non nulles.
sureshraju
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.