Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/10/2016, à 17: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, à 17:30)

Hors ligne

#2 Le 30/10/2016, à 17: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, à 17:40)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( 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, à 17: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, à 17:55)

Hors ligne

#4 Le 30/10/2016, à 18: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, à 18: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, à 19: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, à 19:19)

Hors ligne

#7 Le 30/10/2016, à 20: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, à 20:31)

Hors ligne

#8 Le 30/10/2016, à 20: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, à 20:13)

Hors ligne

#9 Le 30/10/2016, à 20: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, à 20:50)

Hors ligne

#10 Le 30/10/2016, à 20: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, à 22: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, à 05:57)

Hors ligne

#12 Le 31/10/2016, à 14:49

soshy

Re : lost in the shell...

rasdehya a écrit :

j'ai bon?

non roll

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, à 20: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, à 20:16)

Hors ligne