#1 Le 04/10/2016, à 19:08
- turblad
[Résolu]Différence entre commande directe et commande en script
Bonsoir,
Je suis entrain d'étudier un peu le langage de script shell. Petit à petit, à l'aide des diverses pages internet, j'avance quelque peu. Cependant, je me heurte à un problème que je ne comprends pas :
Dans le terminal, je veux extraire une sous-chaîne depuis une variable, je tape ces commandes :
jd@ordi-jd:~$ a=qsdfgh
jd@ordi-jd:~$ b=${a:2:3}
jd@ordi-jd:~$ echo $b
dfg
jd@ordi-jd:~$
j'obtiens le résultat escompté, soit la sous-chaîne « dfg »
Si je mets les mêmes commandes dans un fichier de script
#!/bin/sh
a=qsdfgh
b=${a:2:3}
echo $b
J'obtiens cette erreur :
./essai.sh: 4: ./essai.sh: Bad substitution
------------------
(program exited with code: 2)
Merci d'avance de bien vouloir éclairer ma lanterne (pas trop compliqué quand même pour mon cerveau de 68 ans, j'ai débuté pâtissier et j'ai fini photographe, pas informaticien !)
Dernière modification par turblad (Le 08/01/2020, à 18:08)
Il nous fallut bien du talent pour être vieux sans être adulte
Jacques Brel (chanson des vieux amants)
Hors ligne
#2 Le 04/10/2016, à 19:16
- Watael
Re : [Résolu]Différence entre commande directe et commande en script
salut,
/bin/sh n'est pas (pas toujours) bash !
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 05/10/2016, à 16:30
- DonutMan75
Re : [Résolu]Différence entre commande directe et commande en script
Bonsoir,
pour étoffer un peu la réponse précédente, tu peux taper taper dans ton terminal :
echo $SHELL
Cela te renverra le shell utilisé dans le terminal en question. Tu peux ensuite mettre ce chemin dans le shebang au début de ton script et ça devrait fonctionner à l'identique.
Par défaut, plusieurs shells sont installés sur Ubuntu... et ils ont tous des comportements sensiblement différents ! C'est souvent source d'erreur...
Plus d'information sur les shells ici : https://doc.ubuntu-fr.org/shell
Bonne soirée,
Donut
Hors ligne
#4 Le 05/10/2016, à 18:46
- MicP
Re : [Résolu]Différence entre commande directe et commande en script
Bonjour turblad
La première ligne de ton script contient un shebang
qui va permettre de savoir avec quel programme seront interprétées et exécutées
les commandes contenues dans le fichier script.
Ton script fonctionnera si le shebang est modifié pour :
#!/bin/bash
car ce sont des commandes bash que tu as utilisé dans ton script.
=======
Tu pourrais mettre cette ligne dans ton script avant tes commandes :
echo Le shell en cours d exécution est : $(readlink "/proc/$$/exe")
Ce qui permettra, selon le shebang, d'afficher :
Le shell en cours d exécution est : /bin/bash
ou bien :
Le shell en cours d exécution est : /bin/dash
=======
Pour information, sur debian et ububtu,
/bin/sh est un lien vers le programme /bin/dash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 sept. 26 08:43 /bin/sh -> dash
=======
https://wiki.debian.org/fr/Shell
https://en.wikipedia.org/wiki/Compariso … and_shells
Dernière modification par MicP (Le 05/10/2016, à 19:11)
Hors ligne
#5 Le 05/10/2016, à 22:35
- turblad
Re : [Résolu]Différence entre commande directe et commande en script
Bonsoir et merci de vos réponses.
Je me doutais bien de cette chose mais je n'avais jamais eu l'occasion de repérer la variable d'environnement $SHELL.
De plus, souvent, lorsque je fais des petits essais, je mets le shebang : /bin/bash ! Mais ce jour là, j'ai mis /bin/sh parce que je venais de lire sur un site que cette option était préférable pour raison de plus grande compatibilité avec la plupart des Linux. Je savais d'ailleurs que sur Ubuntu, sh = dash. Mais voilà, on ne pense pas à tout. On peut d'ailleurs se demander quel est l'intérêt de garder les deux.
En attendant, j'avais trouvé la(les) commande compatible :
a=qsdfgh
c=`expr substr $a 3 3`
echo $c
d=$(expr substr $a 3 3)
echo $d
Ça fonctionne mais ça me parait moins joli ; de plus c'est indexé à partir de 1, ce qui fait bizarre en informatique.
Merci encore, j'aurai certainement à nouveau besoin de vous un de ces jours.
Il nous fallut bien du talent pour être vieux sans être adulte
Jacques Brel (chanson des vieux amants)
Hors ligne
#6 Le 06/10/2016, à 04:19
- MicP
Re : [Résolu]Différence entre commande directe et commande en script
https://www.wikivs.com/wiki/Bash_vs_dash
=======
NOTE : Ne pas confondre
le dash (tableau de bord) d'Unity (Ubuntu)
et
le shell dash (Debian Almquist SHell)
Dernière modification par MicP (Le 06/10/2016, à 04:22)
Hors ligne