Pages : 1
#1 Le 30/10/2016, à 16:28
- rasdehya
lost in the shell...
j ai un pb avec ma redaction !!!
until [ -d "$reponse" ] || [ "$(grep .iso "$reponse" 2>/dev/null)" = true ]; do
echo -e $Red"[!]" $Rcol" Ceci n est pas un ISO ou le dossier n en contient pas"
read -p "entrer un chemin correct : " reponse
done
if [ "$(echo "$reponse" | grep .iso)" = true ];then
if [ "$(echo "$reponse" |grep win |grep xp |grep w7)" = true ];then
cp "$reponse" iso/_ISO/WIN;
fi
fi
je veux verifier lorsque l utilisateur rentre le chemin de son dossier ou d un iso dans la variable reponse grace a read:
1) verifier que c'est soit un dossier sois un fichier avec extension .iso
2)si c est un iso rechercher l occurence win ou xp ou w7 ou w8 ou w10 et le copier dans un dossier
et apres ca ce complique si c 'est un dossier...
if [ -d "$reponse" ] ;then
a="ls -1 $reponse"
for ligne in $a ; do
if [ $(echo "$ligne" |grep win |grep xp) = true ]; then
cp ("$reponse/$ligne") /iso/_ISO/WIN;
else echo "test rate";
fi
done
1) Si c 'est un dossier
pour chaque fichier du dossier verifier l occurence win ou xp
2) copier chaque fichier dans un repertoire
Le probleme c est qu il faut que je sois dans le dossier ou ce trouve mes iso pour l iterer ??
si c oui du coup je galere pour lui donner le bon chemin de destiation
si c non bas comment ecrire $reponse/$ligne
car cp $ligne ne marche pas il faudrais qqchose du genre ... mais je sais pas l ecrire... ou je croyais du moins .. je test toute les possibilite et je crois que j ai besoin d un coup de pouce.... j ai de gros soucis de redaction(comprehension plutot).
dans le lot il ya des lignes qui marchent mais qui peuvent etre surement mieux ecrite.... et d'autres ou je suis surement a l ouest ( du genre obliger d utiliser ls -1... c surement pas le mieux)
mon appli shellchecker sert pas a gd chose en fait... sauf pour les oublis grossier
Y aurais t il un meilleur moyen de deboguer des scripts bash... car c pas facile d avoir des info sur les erreur que je fais.
tjs est il que
entrer un chemin correct : /home/ryms/Téléchargements/applications/my_easy2boot/mesiso
tesstt1
tesstt1
tesstt1
Vouler vous créer un fichier pour la percistance ? o/n
03:51 ryms@debian\:~/Téléchargements/applications/my_easy2boot$
ls mesiso/
debian.iso hiren.iso osX osX.iso test test.iso ubuntu.iso win.iso xp.iso
je comprend pas pkoi j ai que 3 fois test rate alors qu il ya 9 fichier?? je devrais en avoir 7 + 2 erreur de cp ...
I'm lost
et concernat les condition et booleans, j arrive pas a trouver de tuto explicite avec exemples avancés... les exemples sont tjs des truc genre [ a = b ] ou [ echo $a = true ] , mais des qu il faut mettre des commande avec options parametres ou des pipes le tout en interpretant des variables...... je suis perdu surtout en ce qui concerne qd mettre des " " ou ' ' ... dans les test...
Un lien vers le tuto de la mort serait bienvenu... j'epluche le wiki.bash-hacker mais ca suffit pas... lol
et un autre vers le debogueur de la mort qui cnnait toutes les fonctions du bash et te dit explicitement tes erreur... un SUPER shellchecker en somme.
merci d avance
Dernière modification par rasdehya (Le 30/10/2016, à 16:30)
Hors ligne
#2 Le 30/10/2016, à 16:39
- ar barzh paour
Re : lost in the shell...
tu peux aller voir ce lien http://abs.traduc.org/abs-fr/
mais attention c'est en français
Dernière modification par ar barzh paour (Le 30/10/2016, à 16:40)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#3 Le 30/10/2016, à 16:49
- pingouinux
Re : lost in the shell...
Bonjour,
Commençons par le plus facile.
je comprend pas pkoi j ai que 3 fois test rate alors qu il ya 9 fichier??
a="ls -1 $reponse"
a va prendre ici successivement les 3 valeurs : ls, -1, $reponse
d'où les 3 tests ratés.
Pour savoir si un nom se termine par .iso
if grep -q '\.iso$' <<<"$reponse"
then
echo "$reponse se termine par .iso"
fi
Ajouté :
si c est un iso rechercher l occurence win ou xp ou w7 ou w8 ou w10
if grep -q 'win\|xp\|w\(7\|8\|10\).*\.iso$' <<<"$reponse"
then
echo "$reponse se termine par .iso et contient : win, xp, w7, w8, ou w10"
fi
Dernière modification par pingouinux (Le 30/10/2016, à 16:55)
Hors ligne
#4 Le 30/10/2016, à 17:08
- rasdehya
Re : lost in the shell...
merci du lien je regarde vitee fait et je voie qu'il prennent en exemples des fichier config de linux... ca parle deja mieux... je le met en onglet bash direct... mais il ya de la relecture a faire...
pinguoin : c exactement ce genre de remarque qu il me faut... shellchecker me dit pas tout ...lol
je savais que grep avais la solutionn mais les pages de man sont dure a dechiffre...
et il faut vraiment que j apprene a jongler avec les \ et (... j ai du retard...j arrive pas a assimiler les concept c pour ca je patauge
ok
a="ls -1 $reponse"
dans l esprit de comprendre les concept peut on ecrire
a="`ls -1 $reponse`"
ou les contre-guillemet font executer la commande...
bien sur pour ce pb il faut utiliser grep -q ... mais c 'etais histoire de... hein.
Hors ligne
#5 Le 30/10/2016, à 17:18
- pingouinux
Re : lost in the shell...
dans l esprit de comprendre les concept peut on ecrire
a="`ls -1 $reponse`"
Non, car si les noms de fichiers contiennent des espaces, ils vont être scindés.
Tu peux faire
for fichier in *
do
echo "Je viens de lire le nom de $fichier"
done
Si tu veux traiter aussi les fichiers cachés (dont le nom commence par un point), tu fais précéder la boucle de
shopt -s dotglob
Hors ligne
#6 Le 30/10/2016, à 18:14
- rasdehya
Re : lost in the shell...
merci ca va ptet finir par rentré dans mon cerveau ;-) ...
le $ dans grep c pour la fin de la ligne ? quel interet de le mettre... c juste par convention ou habitude? ou necessaire
sinon je comprend pas le .* avant le \.iso$...
le * est pour n'importe quel caractere? right ... mais la c 'est pour dire a grep de chercher soit win sois xp avec .iso pour chaque recherche.???... sinon je voie pas un rapport avec les fichier caché??
car de ce que je comprend il va chercher soit win sois xp soit nimporte quel fichier caché soit n'importe quel iso....
dis moi si je suis lourd avec mes questions.. mais il ya tellement...
et faut que j etudie mieux les pages de manuel de grep..
Dernière modification par rasdehya (Le 30/10/2016, à 18:19)
Hors ligne
#7 Le 30/10/2016, à 19:01
- pingouinux
Re : lost in the shell...
le $ dans grep c pour la fin de la ligne ? quel interet de le mettre... c juste par convention ou habitude? ou necessaire
Sans le $ à la fin, tu récupérerais ce fichier, par exemple : win.iso.sh
sinon je comprend pas le .* avant le \.iso$...
le * est pour n'importe quel caractere?
. : N'importe quel caractère
.* : 0 ou un nombre quelconque de caractères quelconques
sinon je voie pas un rapport avec les fichier caché??
Il n'y en a pas. C'est juste au cas où tu voudrais récuérer un fichier de ce genre : .mon_fichier_xp.iso
car de ce que je comprend il va chercher soit win sois xp soit nimporte quel fichier caché soit n'importe quel iso....
La réponse était ici, dans mon message #3
echo "$reponse se termine par .iso et contient : win, xp, w7, w8, ou w10"
Dernière modification par pingouinux (Le 30/10/2016, à 19:31)
Hors ligne
#8 Le 30/10/2016, à 19:12
- rasdehya
Re : lost in the shell...
ok je te suis bien
mais a quel moment il interprete le .* differement des win xp ou autre
echo "$reponse se termine par .iso et contient : win, xp, w7, w8, ou w10 ou .*" .... C est ca que je lis/comprend
Dernière modification par rasdehya (Le 30/10/2016, à 19:13)
Hors ligne
#9 Le 30/10/2016, à 19:29
- soshy
Re : lost in the shell...
grep va chercher un "model" que tu lui passes en paramètre. Ce "modèle" c'est ce qu'on appelle une expression regulière ou une expression rationnelle (voir regular expression / regex).
C'est une façon codifiée de définir un schema pour une chaine de caractère. Et ce code défini le . comme étant n'importe quel caractère.
Et si on reprend ton exemple ça donne:
win\|xp\|w\(7\|8\|10\).*\.iso$
win : les lettres 'w' et 'i' et 'n'
\| : ou
xp : les lettres 'x' et 'p'
\| : ou
w: la lettre 'w'
\(7\|8\|10\): et '7' ou '8' ou '10' (les parenthèses c'est pour la priorité des et/ou, un peu comme en math pour les additions et multiplications).
.*: et n'importe quoi, éventuellement rien
\.iso$: ça termine par .iso
le '.' étant n'importe quel caractère, \. ça permet de dire que c'est vraiment le point qu'on veut et pas n'importe quoi.
Dernière modification par soshy (Le 30/10/2016, à 19:50)
Hors ligne
#10 Le 30/10/2016, à 19:30
- pingouinux
Re : lost in the shell...
echo "$reponse se termine par .iso et contient : win, xp, w7, w8, ou w10 ou .*" .... C est ca que je lis/comprend
Non. C'est
$reponse se termine par .iso ET contient (win OU xp OU w7 OU w8 OU w10) suivis de 0 ou plus caractères quelconques
Hors ligne
#11 Le 30/10/2016, à 21:39
- rasdehya
Re : lost in the shell...
wow... merci soshy je me rend compte a quel point j ai survolé le man bash et les tuto "apprendre bash"... et que j avais besoin d un prof niveau CE2... merci de l'explication détaillée
c trop important c regex, je l ai avait zappe alors que c une des bases !!
echo "$reponse se termine par .iso et contient : win, xp, w7, w8, ou w10 ou .*" .... C est ca que je lis/comprend
Ce que je saisissais pas c etait qu'il y avait un "\"(et) et non un "\|"(ou) entre les win xp w7 et ".*" et ".iso" c le detail qui me passait a coté...
en detaillant et rajoutant les fichiers qui terminent par .dmg ou commence par un ".monisocache" (sans utilise shopt, la c juste pour le delire)
ca donerai
^\.monisocache\|win\|xp\|w7\|w8\|w10\.*\.iso$\.dmg$
j'ai bon?
Le point est pas interprete avec le "\" ... mais pourtant il permait de dire "ou" lorsque suivi d un "|".... ... je vais avoir droit a un tour sur un tuto sur l echappement de caractere... suis pas a l aise non plus !!
je me dis ca a servi presque a rien de lire les manuel sans ecrire mes scripts en meme temps... j'ai perdu du temps a essaye d'assimiller trop de truc theorique .. voila le resultat...
mais j avance bien merci.
Dernière modification par rasdehya (Le 31/10/2016, à 04:57)
Hors ligne
#12 Le 31/10/2016, à 13:49
- soshy
Re : lost in the shell...
j'ai bon?
non
Mais si ça peut te rassurer même moi il m'arrive encore de galèrer avec ces fichu regex!
Il y a des sites de cours sur les regex que google te donnera volontier.
En plus, il y a des outils comme celui ci qui premettent de donner un échantillon de valeur, et tester que la regex trouve la correspondence. Quelques subtilités à noter cependant. Le vrai OU, c'est | simplement. Quand on met un backslash avant un caractère, c'est pour qu'il perde sa "fonction magique" en général.
Exemple:
'.' c'est la fonction magique "n'importe quel caractère", et si tu veux juste le point il faut faire \.
'\' c'est la fonction magique "faire perdre la fonction magique", mais du coup si tu veux un \, il en faut 2 \\, le premier indique que le suivant c'est juste le symbole.
Donc une regex qui va fonctionner sur le site est bonne, cependant il n'est pas garanti qu'elle fonctionne sur les outils dans le terminal sans quelques légères modification (ici ajouter un \ avant le | ). Et pour être honnête, je ne sais vraiment pourquoi. J'imagine dans certain cas c'est pour "solutionner" des conflits entre "fonctions magiques" de bash et des regex. Mais vraiment j'ai aucune idée du détail, pingouinux en sait surement plus que moi là dessus.
Hors ligne
#13 Le 01/11/2016, à 19:04
- rasdehya
Re : lost in the shell...
ok ...dans la veine de regex tester, je suis tombe sur ca regexbuddy... c bluffant.. mais une usine le bordel ... il propose 45 language
Lequel correspond le mieux a bash pour du grep awk sed etc.... ??
Y a plus qu' A ... et c pas une mince affaire, mais j ai bien l intention d en faire un bon pote ce regex ;-)
Et puis , merde c quoi cettehabitude de grattez un torrent ... et en .exe qui plus est...
Et soudain !#?!%! mais c bien sur mon amis apt
je viens de trouver a l instant txt2regex dans les depots...c nettement moins complique que regexbuddy.... et cible pour du bash2.... top...et en francais.. AMEN
recemment j ai creer une floppée de bash_aliases, nottement ceux pour apt...
et je ne me lasse pas de apt-cache search |grep ..., et d apt install qui supporte l auto completion... c vraiment au top debian
allez a + ... le scrip avance
one love
edit...
cette histoire d interpretation des caractere speciaux et donc la notion d echappement qui en decoule je trouve ca tres important a maitriser pour pouvoir "lire"/"comprendre" une ligne de code... car les noms de condition-fonction-module-paramettre en anglais ca va.... mais le reste...
give thanks
Dernière modification par rasdehya (Le 01/11/2016, à 19:16)
Hors ligne
Pages : 1