J’aimerais - est-possible ? - que certaines parties du nom d’un script bash (lancé dans un shell ou une tâche cron) soient utilisée en variable dans ce même script…
J’ai un script qui s’appelle par exemple: backup_0_web01.sh
J’aimerais, quand je lance ce script, que 0 et web01 soient utilisés comme variables à l’intérieur de ce même script…
Salut,
C’est vraiment cool de vous avoir…
Merci beaucoup, vous m’avez fait gagner des heures de recherches (j’avais commencé, mais au bout d’une trentaine de sites et forums… )
J’ai opté pour la solution de MisterFreeze avec sed. 1er essai concluant.
C’est génial de pouvoir utiliser le nom du script lui-même comme variable!
Mais j’ai l’impression qu’avec awk je pourrais plus facilement comprendre et adapter la découpe du nom de fichier. Je vais faire des essais.
@LeDub
Si je met le nom du script dans le script, ça n’a plus d’intérêt ? Enfin je n’ai pas compris ta suggestion, désolé… (je suis plus que limité dans ce domaine…)
[quote=« Totor »]quel effet de bord ?
il faut juste savoir qu’en redéfinissant les paramètres positionnels, ça écrase ceux déjà en place.[/quote]
C’est la définition même d’un effet de bord. Par exemple sur wikipedia :
Là en l’occurrence il est important dans le sens où la probabilité que les paramètres positionnels soient utilisés pour autre chose n’est pas nul. C’est un peu comme en Perl :
$var =~ /\(.*\)_\(.*\)/
Ça modifie ou crée 2 variables $1 et $2. Le désavantage est limité par le fait que ce genre de variables sont utilisée de manière locale.
Mais d’une manière général, c’est bien d’éviter les effets de bord (ça diminue le couplage et simplifie la maintenance).
[quote=“lol”]@LeDub
Si je met le nom du script dans le script, ça n’a plus d’intérêt ? Enfin je n’ai pas compris ta suggestion, désolé… (je suis plus que limité dans ce domaine…)[/quote]
Désolé de ne pas avoir préciser ces deux lignes que je mentionne dans tous mes scripts
SCRIPT_AVEC_EXT=$(basename $0) # Récupération du nom du script exécuté
SCRIPT_SANS_EXT=${SCRIPT_AVEC_EXT%%\.*} # Suppression de l'extension du script
Ces deux lignes me permettent d’avoir un nom de fichier de traces, de configuration ou temporaires ou encore un sujet d’un message qui facilitent grandement le script d’origine.
tu peux m’expliquer ce truc là?
Ca fonctionne avec bash? j’ai essayé dans un script dash ou bash et il y a un problème.
Il a un truc que je ne dois pas conaître.
Zsh utilise des “modifieurs” (je connais pas la dénomination officielle) entre parenthèses pour manipuler les variables directement.
Dans l’exemple je découpe la chaine avec cette syntaxe ${(s:N:)var} avec var la variable et N le où les caractères de découpent. Il en résulte un tableau.
On récupère l’élément que l’on veut avec la syntaxe ${var2[i]} avec var2 un tableau et i l’indice entre 1 et la taille du tableau.
Dernière chose intéressante en zsh, c’est que l’on peut séquencer ces actions ce qui donne ici :
Pour l’autre exemple c’est juste un %.sh qui va retirer le suffixe .sh à la variable avant la découpe.
Avec ces modifieurs on peut vraiment faire énormément de choses, le split, le join, un filtre, une substitution à la sed, des tris (dans un sens ou l’autre avec ou sans respect de la casse), etc. En général on peut avec ça éviter la majorité des appelles à sed et grep (on créer un tableau puis on travaille dessus) et probablement à awk.