Bash si sur une seule ligne


50

Je voudrais savoir comment écrire des conditions à l'intérieur d'un script bash sur une seule ligne.

Par exemple, comment puis-je écrire ceci sur une seule ligne, puis en mettre une autre comme elle sur la suivante?

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

Je pose cette question car j'ai plusieurs alias dans mon .bashrc et j'ai le même .bashrc (synchronisé) sur plusieurs systèmes, mais je n'ai pas besoin de tous les alias sur chaque système. Je mets la plupart d'entre elles à l'intérieur d'instructions if, et tout fonctionne à merveille maintenant, mais elles prennent beaucoup d'espace, 3 lignes chacune plus la ligne vierge entre elles (j'aime les avoir facilement visibles)

J'utiliserai également cette technique pour les variables d'environnement également.


4
Vous pouvez également écrire[ -f "/usr/bin/wine" ] && export WINEARCH=win32
glenn jackman

3
Gardez à l'esprit que plus court n'est pas nécessairement meilleur. Vous pouvez obtenir des erreurs logiques subtiles avec les opérateurs logiques du shell. Choisissez ce qui est plus facile à lire et à entretenir.
glenn jackman

Réponses:


83

Vous l'écririez comme tel:

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

Notez que cela pourrait également être écrit (comme suggéré par @glennjackman):

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
Eh bien, c'était facile ... :) Maintenant, je me sens un peu gêné de demander cela. Merci pour la réponse, cela a beaucoup aidé!
Horațiu Mlendea

7
Il y a une différence. 1. expression sortira avec un état 0, 2. expression sortira avec un état non 0 si le fichier n'existe pas. Cela peut faire la différence si vous l'utilisez dans certaines tâches automatisées comme le déploiement où le succès de la tâche dépend du statut de sortie de la commande.
Jānis Gruzis

@ HorațiuMlendea évidemment c'était facile. si vous savez comment. Mais la syntaxe est compliquée, par exemple [1 == 1] est une erreur mais [1 == 1] fonctionne. Et les points-virgules. Comment pouvez-vous vous sentir gêné de ne pas connaître une syntaxe mal conçue. Votre «sentiment» n'a aucun sens. C'était une question utile, même si malheureusement vous ne comprenez pas pourquoi.
barlop

@balop non, je vois totalement ce que tu veux dire et je suis d'accord. C'est juste qu'à l'époque j'ai compris les bits individuels qui constituaient cette syntaxe (celle avec &&). Habituellement, il est facile et intuitif de rassembler les choses, mais comme vous l'avez dit, cette langue est assez compliquée et peu intuitive.
Horațiu Mlendea

4

Je trouve également que simplement taper n'importe quelle commande complexe if if else, appuyez sur Entrée, puis après son exécution, appuyez simplement sur la flèche vers le haut. La ligne de commande répétera la dernière commande tapée bien sûr, mais dans ce cas, elle mettra le tout sur une seule ligne selon vos besoins. C'est une façon de tricher, mais c'est efficace.


5
Notez que cela peut dépendre de votre shell (et éventuellement des paramètres de votre shell). Quelques tests rapides sur mon ordinateur montrent que cela fonctionne dans Bash (alors ayez un +1), mais Zsh conserve les sauts de ligne lors du retour aux commandes précédentes.
8bittree
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.