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
Beginner
sumber

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 "[email protected] [email protected]"
-p was triggered, Parameter: pkg1 pkg2 pkg3
-m was triggered, Parameter: [email protected] [email protected]
go thru selection
ARG_PKG: pkg1
ARG_PKG: pkg2
ARG_PKG: pkg3
go thru selection email
ARG_MAIL: [email protected]
ARG_MAIL: [email protected]
Felipe Ferreira
sumber
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.

Toine42
sumber
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
sureshraju
sumber
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