Script shell untuk melewati beberapa argumen dengan opsi di baris perintah


2

Saya punya skrip, saya perlu menjalankan skrip ini seperti ini:

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

Tetapi pelaksanaannya seperti ini:

./create_endpoint.sh 10.20.20.1 User1

Naskah:

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

Jawaban:


4

Saya percaya menggunakan getopts adalah solusi yang lebih baik untuk penggunaan di muka, ketika Anda membutuhkan fleksibilitas jumlah argumen yang disetujui.

Ini adalah contoh kerja:

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

ref .. http://wiki.bash-hackers.org/howto/getopts_tutorial

KELUARAN:

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

Bahkan, bendera --controller-ip dan --controller-name diperhitungkan dalam daftar argumen juga.

Anda sebaiknya mengakses argumen dengan $2 dan $4 dan juga, tentu saja, periksa argumen sebelumnya untuk memastikan Anda memengaruhi variabel yang benar.


0

Beri tahu saya jika Anda mencari ini

Naskah:

[[ "$#" -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

ya, seperti di atas. Bisakah Anda memberikan beberapa contoh. Kadang saya melewati satu argumen atau tiga argumen tergantung pada persyaratan. bagaimana saya bisa memvalidasi dan mengeksekusi
Beginner

jika tidak ada argumen yang berbeda-beda maka periksa $ # -ge 2. Kemudian periksa nilai-nilai tidak-nol.
sureshraju
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.