Contributeurs, les sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
Nota : Les autres wiki :
Ré-requis indispensables :
Vous savez donc ce qu'est le shell, un alias et un script.
Mais quel rapport entre la diversité des shell (ou interpréteur de commandes) qui existent (sh ; bsh ; bash ; ksh, etc.) et les scripts ?
#!/bin/sh #!/bin/bash #!/bin/perl #!/bin/tcl
Utiliser #!/bin/sh
permet de tenir compte du standard sh de POSIX.
Voici un PDF assez complet pour apprendre à utiliser le shell sh : http://igm.univ-mlv.fr/~masson/Teaching/PIM-INF3/shell.pdf
–posix
ou insérer set -o posix
au début du script fait que bash se conforme au standard posix.À savoir :
Pour utiliser tcsh, ksh, ash, sh, csh, etc :
http://formation-debian.viarezo.fr/shell.html
méthode d'installation de ksh
Apprendre le Bash sans devenir un “ultra-bashiste” : si si c'est possible !
En général, tous les shell acceptent la même syntaxe de base telle que définie par POSIX, mais chacun accepte une syntaxe étendue qui lui est propre (et donc incompatible avec les autres shells).
Voici quelques aspects auxquels se référer à chaque fois que vous apprendrez une nouvelle notion relative au shell Bash.
POSIX | À éviter : bashisme |
---|---|
if [ “$toto” = “$titi” ] ; then … | if [ “$toto” == “$titi” ] ; then … |
diff -u fichier.orig fichier.c | diff -u fichier.{orig,c} |
mkdir /tototiti /tototutu | mkdir /toto{titi,tutu} |
funcname() { … } | function funcname() { … } |
format octal : « \377 » | format hexadécimal : « \xff » |
echo
, ses options ne sont pas prises en compte de la même manière selon les shell :-e
et -E
.-n
.printf
plutôt que la commande echo
si vous avez besoin d’intégrer des séquences d’échappement dans la chaîne de sortie.printf format [argument]....
\b
: Espace arrière \n
: Nouvelle ligne\t
: Tabulation horizontale\v
: Tabulation verticale.printf "Coucou\n"
Coucou
man printf
$( )
Pour plus de détails sur chacun de ces points voir : Guide avancé d'écriture des scripts Bash :36.9. Problèmes de portabilité
Il s'agit là plutôt d'un aboutissement, essayons d'acquérir par des exemples très simples, les connaissances de bases qui permettront de comprendre chacun de ces points, ainsi que ce que l'on trouve ici : scripts
Il y a différentes méthodes pour lancer ses scripts, cela dépend, vous l'aurez compris, du répertoire dans lequel sont placés ses scripts.
touch mon-script
Si l'on a exécuté cette commande à l'ouverture de son terminal, le fichier “mon-script” est alors placé dans son répertoire courant.
Et oui un script est un simple fichier texte dont le contenu (une suite de commandes et d'instruction) est exécutable.
À savoir :
chmod u+x mon-script
Voyons maintenant trois méthodes pour exécuter un script
nano mon-script
dans lequel on inscrit :
echo -n "Bonjour les copains"
bash nom-du-script
Comme on le fait pour une commande.
bash mon-script
Bonjour les copainsutiliateur@debian:~$
/bin/echo -n "Bonjour les copains"
La commande echo est une commande interne du shell ; la commande /bin/echo est une commande à part.
merci captnfab
Essayez maintenant :
bash --posix mon-script
Bonjour les copainsutilisateur@debian:~$
#!/bin/bash ls /home/utilisateur
./mon-script
./fichier
désigne un fichier exécutable, donc des scripts../fichier
afin de savoir de quoi on parle, sans avoir à se soucier de la configuration du fichier ~/.bashrc
des lecteurs.
À voir : modifier-durablement-la-valeur-de-la-variable-d-environnement-path
/bin
, /usr/bin
ou /usr/local/bin
~/.bashrc
qui est un fichier caché du répertoire courant de l'utilisateur (son répertoire personnel); PATH=$PATH“:$HOME/MesScripts
.mkdir MesScripts
~/.bashrc
nano ~/.bashrc
PATH=$PATH”:$HOME/MesScripts“
.~/.bashrc
, on peut y ajouter cette ligne en faisant :
echo 'PATH=$PATH":$HOME/MesScripts"' >> ~/.bashrc
Merci à phlinux pour cette remarque
nano mon-script
#!/bin/bash printf "yep coucou!\n"
chmod u+x ~/mon-script
mv ~/mon-script ~/MesScripts/
source ~/.bashrc
. ~/.bashrc
Ou encore
exec $SHELL
Et voilà pour exécuter son script, il suffit maintenant de tapez dans le terminal le nom de son script !
mon-script
doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux yep coucou! </file>
Fermez et ré-ouvrez le terminal; puis tapez :
echo $PATH
doc:programmation:shells:la-page-man-bash-les-caracteres-speciaux /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/utilisateur/MesScripts </file>
source ~/.bashrc
\\(ou son équivalent . ~/.bashrc
):~/.bashrc
.Pas si difficile que ça
Pas d'inquiétude si vous ne comprenez pas tout ; vous en en serez capable après avoir suivi les wiki sur les scripts, et consulté leurs liens. Il faut :
~/.bashrc
pour ajouter au Path le chemin de son fichier de type répertoire (MesScripts) (comme ci-dessus);#!/bin/bash set -o posix printf "Un nouveau script $USER ? Son nom : " { read nom ; echo "#!/bin/bash" >> $nom ; chmod u+x $nom ; mv ~/$nom ~/MesScripts ; /usr/bin/gedit ~/MesScripts/$nom ;}
#!/bin/bash set -o posix printf "Un nouveau script $USER ? Son nom : " { read nom ;\ echo "#!/bin/bash" >> $nom ;\ chmod u+x $nom ;\ mv ~/$nom ~/MesScripts ;\ /usr/bin/gedit ~/MesScripts/$nom ;}
Espace avant le point virgule, puis antislash \ accolé au point virgule ; puis ↵ Entrée (espace ou non avant la nouvelle commande).
scriptx
Un nouveau script toto ? Son nom :
Lors de l'exécution de ce script, la chaîne que vous entrerez pour répondre à la question, sera le nom du nouveau script que vous voulez créer.
Imaginons que nous avons beaucoup de scripts et que vous souhaiter les ranger dans différents dossiers pour qu'ils soit classés.
Pour lancer un script (d'essai par exemple sans se soucier s'il est rangé dans l'un de vos différents répertoires indiqués dans le fichier ~/bashrc
.
On peut éditer ce dernier, et y ajouter
PATH=$PATH”:.“
PATH=$PATH”:$HOME/.“
Dans ces deux cas, quelque soit l'endroit où l'on se trouve dans l'arborescence, on peut lancer son script en l'appelant avec son nom !