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.