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