#1 Le 03/07/2007, à 16:51
- toufalk
[script] saut de ligne dans variables
Bonjour,
Je voudrais faire un script bash qui sauve des données de l'utilisateur sur un serveur distant.
Comme j'ai plusieurs utilisateurs et que je n'ai pas envie de personnaliser le script pour chaque utilisateur, j'ai pensé utiliser un fichier caché où il y aurait les paramètres du script.
$cat .sauverc
# parametres de sauver.sh
# login distant
log:user
# dossiers a conserver
# syntaxe :
# rep:dossier_a_sauver
rep:Truc
rep:Machin/bidule
Voilà pour le .sauverc. Maintenant le script
#!/bin/bash
#
param=`cat $HOME/.sauverc | grep -v "#"`
log=`echo -e $param | grep "log:" | cut -d":" -f2`
reps=`echo -e $param | grep "rep:" | cut -d":" -f2`
echo "login: $log"
echo "dossiers:"
echo "$reps"
Mais voilà le resultat:
$ sauve.sh
login: user rep
dossiers:
user rep
Visiblement, les sauts de ligne ont disparu dans $param. Pourtant, j'ai utilisé echo -e, pour justement les avoir!
Alors, bien sûr, je pourrais mettre tout sur une ligne, genre
cat $HOME/.sauverc | grep -v "#" | grep "log:" | cut -d":" -f2
mais j'ai peur des lignes à rallonge : pas facile de trouver un bug et pas facile à relire 6 mois après !
Quelqu'un sait comment faire réapparaître mes sauts de ligne ?
Ou alors, il y a peut-être plus simple pour récupérer mes données...
Merci.
Hors ligne
#2 Le 05/07/2007, à 21:15
- JoelS
Re : [script] saut de ligne dans variables
Les sauts de lignes sont virés par l'opérateur `et remplacés par un caractère espace. Tu n'y peux pas grand chose.
2 questions:
pourquoi veux tu garder des sauts de lignes dans tes variables ?
qu'est-ce que tu veux faire exactement en matière de sauvegarde ?
Probablement qu'un outil de sauvegarde à base de rsync ou rdiff-backup est mieux adapté que faire un truc à la main.
Hors ligne
#3 Le 06/07/2007, à 07:56
- toufalk
Re : [script] saut de ligne dans variables
Les sauts de lignes sont virés par l'opérateur `et remplacés par un caractère espace. Tu n'y peux pas grand chose.
Bon bah, tant pis. Je vais faire autrement.
pourquoi veux tu garder des sauts de lignes dans tes variables ?
Je voulais m'en servir pour filtrer avec le couple grep/cut et obtenir les infos du fichier de config. J'avais bien vu que mes sauts de ligne dispaissaient. Pour après, d'ailleurs, c'était mieux.
qu'est-ce que tu veux faire exactement en matière de sauvegarde ?
Probablement qu'un outil de sauvegarde à base de rsync ou rdiff-backup est mieux adapté que faire un truc à la main.
Oui, je pense que je pourrais utiliser des outils de ce genre... Mais c'était l'occasion de se mettre aux scripts!
Je ne fait pas quelque chose de compliqué : après avoir extrait les paramètres du fichier de config, un tar des bon dossiers, un scp vers un lieu "sûr" et un mv vers un dossiers contenant toutes les archives...
Vraiment pas dur. Avec à chaque fois, un test pour s'assurer que les commandes se sont bien déroulée, et dans le cas contraire, hop zenity pour dire qu'il y a eu un problème.
A l'origine, ce script était pour moi mais j'ai des collègues (qui n'y connaissent rien au bash et le terminal leur fait peur ) qui sont intéressés... Et j'ai pas envie de me taper toutes les reconfig et mon script!
Hors ligne
#4 Le 06/07/2007, à 08:36
- naholyr
Re : [script] saut de ligne dans variables
Tu peux ajouter des \n
Pour ajouter un \\n (double back-slash pour que `` ne l'interprète pas tout de suite, sinon il le remplace en espace, là il le remplacera par \n) à la fin de chaque ligne sed 's/$/\\\\n/'
Il faut aussi penser à échapper tes backslashs, là ça devient violent il faut bien compter sed 's/\\\/\\\\\\\/'
Total :
var=`cat $fichier | grep -v "^#" | sed 's/\\\/\\\\\\\/' | sed 's/$/\\\\n/'`
Messagerie instantanée : naholyr@jabber.fr
Envoyer vos images sur le web d'un clic !
Choix du système à rebooter (graphique)
Hors ligne
#5 Le 06/02/2013, à 00:39
- dionisos
Re : [script] saut de ligne dans variables
Désolé pour le détérage, mais je suis tombé sur ce poste la en faisant une recherche donc je pense que ça peut valoir le coup de préciser les choses.
En réalité il suffit d’ajouter les guillemets qu’il a oublié de mettre autour de $param:
log=`echo -e "$param" | grep "log:" | cut -d":" -f2`
reps=`echo -e "$param" | grep "rep:" | cut -d":" -f2`
Dernière modification par dionisos (Le 06/02/2013, à 00:42)
Hors ligne