Arguments conditionnels

Comment passer des arguments lors du lancement du script bash afin que des lignes spécifiques soient exécutées dans le script

Par exemple ( createfile.sh ):

 #!/bin/bash export CLIENT1_DIR="<path1>" export CLIENT2_DIR="<path2>" chef-solo -c solo.rb -j client1.json chef-solo -c solo.rb -j client2.json 

alors

 $ ./createfile.sh client1 

ne devrait exécuter client1 des lignes spécifiques à client1 , et le replace par client2 ne devrait exécuter que des lignes spécifiques à client2 .

Il y a beaucoup de solutions à cela. En voici un:

 #!/bin/bash client="$1" case "$client" in "client1") export CLIENT1_DIR="<path1>" ;; "client2") export CLIENT2_DIR="<path2>" ;; *) printf 'Invalid client argument: %s\n' "$client" >&2 exit 1 ;; esac chef-solo -c solo.rb -j "$client".json 

La variable client obtient la valeur du premier argument de command line.

L'instruction de case définit CLIENT1_DIR ou CLIENT2_DIR fonction de cette valeur (ou se termine par un message d'erreur si une valeur non valide a été utilisée).

Puis chef-solo est appelé avec le file JSON correspondant à ce qui a été donné sur la command line.

Vous avez les lignes dans une fonction:

 #!/bin/bash clientOne(){ ## client1 specific lines echo "one" } clientTwo(){ ## client2 specific lines echo "two" } case "$1" in "client1") clientOne ;; "client2") clientTwo ;; *) echo "Wrong option" >&2 ;; esac ## Common lines echo foo