Vous n'êtes pas identifié(e).
rien n'y fait..
Si vous pouviez m'aider, ca serait sympa (et je suis preneur de l'explication svp, car il doit me manquer un élément pour comprendre)
Thks
kbvz
Dernière modification par kbvz (25-03-2021 11:20:43)
Hors ligne
[ ! $rep == ^/ ] Deux fois le signe =
EDIT Simple hypothèse:
Avec un seul signe = tu affectes une valeur a ta variable. Et les crochets testent si l'affectation s'est bien passée
Dernière modification par nlancien (27-12-2020 20:25:07)
Hors ligne
Bonjour,
Typo?[ -z $rep ] && [! $rep = ^/ ]
rep="tata"; if [ ! $rep == "tata" ]; then echo "toto"; else echo "tata"; fi
[ ! $rep == ^/ ] Deux fois le signe =
EDIT Simple hypothèse:
Avec un seul signe = tu affectes une valeur a ta variable. Et les crochets testent si l'affectation s'est bien passée
Et bien merci pour la précision, il ne me semblait pas que le = affectait la valeur a la variable dans les crochets mais a nouveau, je suis loin d'etre un pro ^^
j'ai du séparer les while car il ne les prenaient pas en compte.
je n'ai plus de message d'erreur mais il n'arrive pas a sauvegarder..
Lorsque je lance le script, si je tape /home/toto (qui existe) il me retourne "doit commencer par un /"...
Dernière modification par kbvz (28-12-2020 12:43:35)
Hors ligne
Mais là, je détecte bien le / en début de chaine rep
EDIT :
A l'air de donner satisfaction
PS : Je ne suis pas un pro!
Dernière modification par nlancien (28-12-2020 14:45:26)
Hors ligne
pourquoi utiliser sudo?
Dans ta commande cp tu donnes le répertoire source mais pas la destination
Je n'ai pas compris non plus pourquoi tu mets une condition else puisque c'est le message qui suis ta commande cp
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
hello
sudo cp -r $rep/home/save/
pourquoi utiliser sudo?
Dans ta commande cp tu donnes le répertoire source mais pas la destination
Je n'ai pas compris non plus pourquoi tu mets une condition else puisque c'est le message qui suis ta commande cp
- Sudo, au cas ou l'utilisateur qui execute le script n'ai pas le droit de copier le repertoire
- ah si mais entre temps, j'ai fait une boulette, j'ai viré l'espace
la bonne ligne de commande c'est:
peut etre me suis je trompé ailleurs ?
source = $rep
destination = /home/save
Hors ligne
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
A voir si ceci peut être adapté a ton cas...
rep="toto"; if grep -q -E ^/ <<<$rep; then echo tata; else echo tutu; fi
Mais là, je détecte bien le / en début de chaine rep
EDIT :while ! grep -q -E ^/ <<<$rep; do read rep; done
A l'air de donner satisfaction
PS : Je ne suis pas un pro!
Oulla alors why not mais je ne le comprends pas forcement
je connais le <, le << mais pas le <<<<
tant que le grep ne lis (en silence) pas comme demandé $rep alors on continue le read ?
Hors ligne
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
tu as bien un message d'erreur?
J'en ai eu à un moment mais j'ai pas percuté tout de suite en effet trop concentré sur l'histoire du /.
là je viens de le corriger mais il m'ignore totaleemnt le / dans le read
Hors ligne
me souviens plus trop les détails sur la commande cp mais d'apres le man il faut utiliser l'option -t pour un répertoire
cp c'est bien mais il faut attendre que le terminale te rende la main et tu sais pas trop ce qu'il se passe
perso j'utiliserais rsync avec l'option --progress
homme j'ai fait un test brut sans les options ca ne fait pas trop le taff que je souhaite mais je vais regarder en détail, c'est peut etre une solution
Hors ligne
là je viens de le corriger mais il m'ignore totaleemnt le / dans le read
a quel moment? car la variable intègre le /
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
je connais le <, le << mais pas le <<<<
tant que le grep ne lis (en silence) pas comme demandé $rep alors on continue le read ?
Voiila.
le <<< permet de jouer avec des variables et non des fichiers
grep va renvoyer un code de retour 0 s'il trouve le / en début de chaîne. Le -E est pour avoir les expressions régulières étendues. Je ne sais plus trop a quoi elles correspondent, mais si je ne le mets pas, je me vautre... souvent.
Tant que j'ai un code de retour différend de 0 je boucle. Tant que je n'ai pas trouvé ce /.
Le -q est là pour ne pas avoir un retour dont je n'ai strictement rien à faire. Seul le code de retour (sa réussite ou son échec) de l'instruction m'intéresse. Ce qu'il trouve m'indiffère.
J'ai un peu oublié les subtilités des tests en bash, la différence profonde entre "==" et "-eq" notamment
Dernière modification par nlancien (28-12-2020 15:48:02)
Hors ligne
kbvz a écrit :là je viens de le corriger mais il m'ignore totaleemnt le / dans le read
a quel moment? car la variable intègre le /
ok c'est moi qui m'explique mal.
la variable doit intégrer le / mais c'est bien le read qui donne sa vlaeur à la variable.
le read permet à l'utilisateur de taper une chaine decractere et le read renvoi cela dans la variable.
mon soucis est que lorsque j'execute le script et que je tape:
/home/toto
le script me renvoi que ca doit commencer par un /
Hors ligne
edit:
j'ai repris un test sur un de mes scripts qui fonctionne, donc pour le test ce serait
reedit : du coup il faut inverser le test avec until tant que faux (1) redemander l'entrée pour ta variable rep
Dernière modification par Croutons (28-12-2020 16:52:10)
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
Hors ligne
Alors, j'ai trouvé avec toutes vos aides et l'aide "d'un ami",
while [[ ! "$rep" =~ ^\/* ]]
Ca marche bien aussi
la faut que tu m'expliques le test je comprend pas du tout , surtout que cela ne fonctionne pas
Dernière modification par Croutons (30-12-2020 19:45:32)
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
kbvz a écrit :Alors, j'ai trouvé avec toutes vos aides et l'aide "d'un ami",
while [[ ! "$rep" =~ ^\/* ]]
Ca marche bien aussi
la faut que tu m'expliques le test je comprend pas du tout , surtout que cela ne fonctionne pas#!/bin/bash
read rep
until [[ $rep =~ (debian) ]]
do
echo "pas bon"
read rep
done
Quelle partie ? ?
La première fonctionne normalement.
Quant à la seconde, mon but est de m'assurer que le contenu de read est un nom bien précis (que j'aurais mis dans le echo)
Du coup tant que ça n'est pas ce sur je veux (debian par exemple), ça marche pas. Si ça marche, j'exécute une commande.
Tant que pas debian alors pas bon
Si debian alors action
Le until semblait pas mal mais le whike marchait pas mieux ?
Hors ligne
ça le fait
Quant à la seconde, mon but est de m'assurer que le contenu de read est un nom bien précis (que j'aurais mis dans le echo)
Du coup tant que ça n'est pas ce sur je veux (debian par exemple), ça marche pas. Si ça marche, j'exécute une commande.
Tant que pas debian alors pas bon
Si debian alors action
-->les cahiers du debutant<-- WikiDF-->Découvrir les principales commandes Linux<--
L' expérience, c'est le nom que chacun donne à ses erreurs. Oscar Wilde
Hors ligne
Hors ligne