Discussion:Introduction aux scripts shell

De Ensiwiki
Aller à : navigation, rechercher

Variables et quoting

Attention, il y a beaucoup d'utilisation de $VAR sans guillemets. En général, sauf si on sait ce qu'on fait, l'utilisation d'une variable en shell est "$VAR".

Typiquement, l'exemple

VAR=$(ls)
if [ $VAR .... ];

ne va pas marcher, et éventuellement faire des choses plus qu'étranges si il existe un fichier, par exemple 42 -eq 42 -o dans le répertoire courant.

--Moy 12 août 2010 à 15:38 (UTC)


Certes cela ne marchera pas a cause des espaces présents dans la commande ls. Si on ne met pas de guillemets le Shell interprétera plusieurs chaines et dans la condition cela ne marchera pas. Mais si les variables ne contiennent pas d'espaces, cela ne devrait pas poser trop de problèmes.

  • Tout à fait, mais la syntaxe "$VAR" marche dans tous les cas. Il n'y a pas de raison de ne pas l'utiliser par défaut. --Moy 13 août 2010 à 09:38 (UTC)

Quant aux fichiers qui s'appellent 42 -eq 42 -o ou 42 -lt 42 -a ... j'avoue que ca ne m'a jamais meme traversé l'esprit. Neanmoins en se forcant on peut arriver a faire des choses bizzares, cependant on saura pourquoi...

  • Ça dépend dans quel contexte. Par exemple, si le shell est un script CGI, et que la variable est un paramètre de la requette HTTP, on a du code utilisateur injecté dans le if, et la faille de sécurité n'est pas très loin. Idem si le script est écrit par un sysadmin et mis à disposition de ses utilisateurs via sudo (penses à un bout de code type if [ ... ]; then echo "Non, ceci est interdit"; exit 1; fi; .... Bien sûr qu'un fichier "42 -eq 42" n'arrive pas ici par hasard, mais autant prendre les bonnes habitudes dès le début, et écrire du code qui a un minimum de chances d'être troué au niveau sécurité. --Moy 13 août 2010 à 09:38 (UTC)

A noter que si on a rien que

if [ $VAR = 42 ]

Il faut deja que le repertoire contienne un fichier du type 42 -eq 42 -o 42 ....

--Clercf 12 août 2010 à 20:20 (UTC)

Nom de page

Il faudrait trouver un meilleur nom pour cette page. Pour l'instant, on a Script Shell et Scripts shell qui sont deux pages différentes, c'est un peu troublant ... Je propose « Introduction aux scripts shell » --Moy 4 octobre 2010 à 09:50 (CEST)

Fait --Moy 14 février 2011 à 11:24 (CET)