#1 Le 07/01/2013, à 23:11
- Ric_punk
Ne pas créer le fichier si il existe
Salut à tous
J'ai écrit un petit bout de script pour vérifier si un fichier existe, vérifier son contenu et insérer du texte si ce texte n'est pas présent
if [ -f "fichier" ];then
verification="écrire dans le fichier"
grep -q "$verification" fichier || echo "écrire dans le fichier" >> fichier
echo "le fichier existe";
else echo 'écrire dans le fichier' > fichier;
fi
Est-ce que c'est bon ou pas
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#2 Le 07/01/2013, à 23:21
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
Quand tu as essayé ton script, c'était bon ou pas ?
Ou tu demandes sans avoir essayé toi même ? Si oui, pour quelle raison ?
#3 Le 08/01/2013, à 00:00
- Ric_punk
Re : Ne pas créer le fichier si il existe
Oui ça a marché mais je me demandais simplement si il n'y a pas plus simple...
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#4 Le 08/01/2013, à 00:43
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
Ça ça te plait mieux ?
verification="écrire dans le fichier"
[ -z "$(grep -s $verification fichier)" ] && echo "$verification" >> fichier
Dernière modification par Compte anonymisé (Le 08/01/2013, à 00:59)
#5 Le 08/01/2013, à 01:58
- Ric_punk
Re : Ne pas créer le fichier si il existe
Ah ouais ça a l'air bien plus simple
Merci je vais tester ça avec mes paramètres...
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#6 Le 08/01/2013, à 03:52
- Watael
Re : Ne pas créer le fichier si il existe
finalement, il ne s'agit que d'écrire le même message (verification="écrire dans le fichier") à la fin du fichier quelque soit son contenu, non?
donc
verification="écrire dans le fichier"
echo "$verification" >> fichier
si le fichier n'existe pas, il est créé.
φlip: le test et la substitution de commande sont inutiles
grep -qs motif fichier && echo "écrire dans le fichier" >> fichier || echo "écrire dans le fichier" > fichier
mais comme je viens de l'explication, cela ne semble même pas nécessaire.
Dernière modification par Watael (Le 08/01/2013, à 03:52)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 08/01/2013, à 06:22
- pingouinux
Re : Ne pas créer le fichier si il existe
Bonjour,
Je propose ceci :
grep -qs "$verification" fichier || echo "$verification" >> fichier
Hors ligne
#8 Le 08/01/2013, à 07:09
- Watael
Re : Ne pas créer le fichier si il existe
Je lisais le code, mais pas la description de Ric_punk :
vérifier son contenu et insérer du texte si ce texte n'est pas présent
du coup, je dirais comme pingouinux.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 08/01/2013, à 10:20
- Ric_punk
Re : Ne pas créer le fichier si il existe
Impec, merci à tous les 2 ça fonctionne parfaitement
En fait je cherchais cette commande parce que j'essaie de me faire un script qui va customiser ma version de linux grâce au script de frafa (http://forum.ubuntu-fr.org/viewtopic.php?id=424373) mais j'ai remarqué que de temps en temps ça bloque, donc si j'ai besoin de relancer le script il faut que celui-ci évite de modifier les fichiers une 2e fois
Les fichiers concernés sont assez nombreux (tous les ppa que j'ajoute + modifications pour ne pas prendre les sources - src) la config du parefeu avec mes règles, création des connexions internet (wifi et ethernet), modification du fichiers sources.list, modifications des fichiers de langue, suppression de la prise en charge de l'ipv6 dans ufw, config du fichier logrotate, vsftpd.conf, etc, etc.....
Merci encore ;-)
Dernière modification par Ric_punk (Le 08/01/2013, à 10:21)
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#10 Le 08/01/2013, à 21:15
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
Ok super.
En fait dans mon premier message, je craignais que tu demandes d'essayer ton script sans l'avoir essayé toi-même.
Ensuite, j'ai identifié ce qu'il y avait de superflu dans ton script, à savoir:
1) le test d'existence de "fichier"
2) distinguer la redirection ">" de ">>" inutile ici.
Ça a permis de passer de 6 lignes de scripts à 2 lignes, si on inclut la déclaration de variable "verification".
Et... j'avais testé !
Ensuite, on pouvait effectivement encore enlever quelques caractères, mais ça ne remet pas en cause l'idée initiale.
#11 Le 08/01/2013, à 23:19
- Ric_punk
Re : Ne pas créer le fichier si il existe
Ah ben non, je ne demande pas qu'on teste quelque chose que je n'ai pas testé, soit je cherche en testant et demande de l'aide par la suite soit je demande directement si je n'ai aucune idée de ce que je dois faire...
D'ailleurs je vais faire quelque recherches pour comprendre ce que tu as indiqué, ce qui m'évitera de redemander la même chose plus tard ;-)
Merci
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#12 Le 09/01/2013, à 00:20
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
Un petit pense-bête utile pour ne pas dire indispensable => Introduction to if
ps: les plus grosses vacheries que j'ai personnellement rencontrées sont...
1 - les incompatibilités partielles entre /bin/sh et /bin/bash ... et qui évoluent selon les versions (prise de tête garantie).
2 - la subtilité de gestion des 3 guillements suivants: " ' ` , particulièrement avec la fonction sed utilisée de manière poussée.
Il y a de quoi se casser les dents, mais quand on a plus de dents, c'est qu'on a appris au moins un minimum....
Dernière modification par Compte anonymisé (Le 09/01/2013, à 00:30)
#13 Le 15/01/2013, à 16:26
- Ric_punk
Re : Ne pas créer le fichier si il existe
Désolé de la réponse tardive...
Merci beaucoup pour le pense bête...
Je peux me casser les dents, pas grave, ce ne sont pas les miennes...
Si tu as une demande à faire, explique toi clairement, tu risques d'être incompris...
Hors ligne
#14 Le 28/01/2013, à 18:48
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
Hello !
J'utilise la syntaxe suivante qui fonctionne
grep -qs "$verification" fichier || echo "$verification" >> fichier
Cependant je dois aussi l'utiliser pour insérer une ligne dans le fstab, il me faut donc le faire en mode super utilisateur mais malgré l'utilisation de sudo j'ai un message d'erreur disant que je n'ai pas les droits nécessaires !
Ma ligne de commande :
sudo grep -qs "blablabla" /etc/fstab || sudo echo "blablabla" >> /etc/fstab
Réponse :
bash: /etc/fstab: Permission non accordée
une petite aide ?
Dernière modification par Compte anonymisé (Le 28/01/2013, à 18:50)
#15 Le 28/01/2013, à 20:42
- Sciensous
Re : Ne pas créer le fichier si il existe
Hello !
J'utilise la syntaxe suivante qui fonctionne
grep -qs "$verification" fichier || echo "$verification" >> fichierCependant je dois aussi l'utiliser pour insérer une ligne dans le fstab, il me faut donc le faire en mode super utilisateur mais malgré l'utilisation de sudo j'ai un message d'erreur disant que je n'ai pas les droits nécessaires !
Ma ligne de commande :
sudo grep -qs "blablabla" /etc/fstab || sudo echo "blablabla" >> /etc/fstabRéponse :
bash: /etc/fstab: Permission non accordéeune petite aide ?
Un classique (néanmoins pas trop courant :
sudo sh -c 'grep -qs "blablabla" /etc/fstab || echo "blablabla" >> /etc/fstab'
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#16 Le 28/01/2013, à 21:45
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
Evidement ça fonctionne
merci beaucoup !
Ceci dit pourquoi "sh -c" alors que le reste des lignes de mon script fonctionne bien avec un simple sudo ?
#17 Le 28/01/2013, à 21:45
- Watael
Re : Ne pas créer le fichier si il existe
salut,
sudo -s <<eof
grep -qs "blablabla" /etc/fstab || echo "blablabla" >> /etc/fstab
eof
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 29/01/2013, à 10:32
- Sciensous
Re : Ne pas créer le fichier si il existe
Evidement ça fonctionne
merci beaucoup !
Ceci dit pourquoi "sh -c" alors que le reste des lignes de mon script fonctionne bien avec un simple sudo ?
j'espère ne pas dire de bétise, mais c'est à cause des priorités d'interprétation : le sudo pour écrire ne porte en fait que sur le echo et non l'écriture >>
(au passage, le 1er sudo est inutile: grep -qs "blablabla" /etc/fstab || sudo -c 'echo "blablabla" >> /etc/fstab')
PS: n'oublie pas le résolu dans le titre !
Dernière modification par Sciensous (Le 29/01/2013, à 10:33)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#19 Le 29/01/2013, à 11:26
- Compte anonymisé
Re : Ne pas créer le fichier si il existe
ok merci pour ces précisions.
PS : je ne suis pas l'initiateur de ce fil, je ne peux pas éditer le premier post.
bonne journée et merci encore