Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1597 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  aide correction script bash

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

aide correction script bash

n°364933
farib
Posté le 25-11-2003 à 09:20:27  profilanswer
 

voila, je dois toujours faire un script qui 'donne les fichiers en double du répertoire courant' en bash, pour apprendre, même si des utilitaires C existent ;)
 
donc la j'ai pondu un "script" qui d'arès moi devrait marcher, d'apres les morceaux d'élements que j'ai réussi a chopper par ci par la, mais évidemment ça marche pas  donc si vous pouviez m'aider...
 
(oui c pas élégant mais j'en suis au stade de l'apprentissage)
 
donc je liste les fichiers du répertoire, les trie par ordre de taille, et les teste 2 à 2 avec diff ( complexité linéaire)

#!/bin/bash
 
#cree une liste des fichiers triee par odre de taille
TOTO=`ls -l $1| grep -vE ^d | sort -nk 5 | awk '{print $8}'`
 
#donne le nombre d'elements ( de fichiers)
NB_FICHIERS=`echo $TOTO | wc -w`
 
#prend le premier element
PREC=`echo $TOTO|awk '{print $1}'`
 
#initialise la boucle
I=2
 
#on boucle tant qu'on a pas teste le dernier fichier
until test $I -ge $NB_FICHIERS
do
#on selectionne le i-ème fichier
FICHIER_COURANT=`echo $TOTO|awk '{print $'$I'}'`
#si les fichiers sont identiques ( diff ne retourne rien)
if test -z `diff $PREC $FICHIER_COURANT`
then
echo "les fichiers $PREC et $FICHIER_COURANT sont identiques"
fi
PREC=$FICHIER_COURANT
I=`expr $I + 1`
done


j'ai corrigé 2-3 errerus de syntaxe et betes, mais j'ai une erreur ./dascript: line 16: test: -ge: unary operator expected que je ne comprend pas


Message édité par farib le 25-11-2003 à 10:30:32

---------------
Bitcoin, Magical Thinking, and Political Ideology
mood
Publicité
Posté le 25-11-2003 à 09:20:27  profilanswer
 

n°364946
Cruchot
Posté le 25-11-2003 à 09:44:18  profilanswer
 

Hum, bizarre, c'est moi le script passe nickel.
 
T'es sous quoi ??


Message édité par Cruchot le 25-11-2003 à 09:44:31
n°364947
farib
Posté le 25-11-2003 à 09:46:20  profilanswer
 

nan tu te fous de ma gueule, chez toi ça passe ? :ouch: :heink:


---------------
Bitcoin, Magical Thinking, and Political Ideology
n°364948
bobuse
Posté le 25-11-2003 à 09:46:32  profilanswer
 

ben tu dois avoir un guillement non-fermé ...
 
je viens de faire un copier-coller sous emacs, et je vois tout de suite l'erreur !!!
 
#prend le premier element
PREC=`echo $TOTO|awk '{print $1}'
 
il manque un ` à la fin de cette ligne :pfff:

n°364950
Cruchot
Posté le 25-11-2003 à 09:49:34  profilanswer
 

farib a écrit :

nan tu te fous de ma gueule, chez toi ça passe ? :ouch: :heink:


 
Ah bien j'ai pris que les 12 dernieres lignes donc c'est normal que ca passe :lol:
 
Sinon oui il manque un `

n°364961
bobuse
Posté le 25-11-2003 à 10:06:47  profilanswer
 

Heuu juste comme ça en passant, tu as pas mal d'erreur dans ton script :/
 
qualques pistes :
 - tu incrémentes jamais i, ça boucle à l'infini -> man expr
 - la variable i n'est pas la même que I
 - awk '{print $$I}' : apparemment, tu veux que awk interprete print ${la valeur de I}, dans ce cas, il faut évaluer $I, il faut donc fermer et réouvrir tes quotes, ça donne : awk '{print $'$I'}'
 
bon courage :)

n°364967
farib
Posté le 25-11-2003 à 10:14:54  profilanswer
 

corrigé ( je vais y arriver, je vais y arriver...)
 
bon zut I=$I+1 ça marche pas comme ça, faut que je fasse évaluer la valeur numérique


Message édité par farib le 25-11-2003 à 10:25:58

---------------
Bitcoin, Magical Thinking, and Political Ideology
n°364974
bobuse
Posté le 25-11-2003 à 10:28:47  profilanswer
 

oui

Citation :

-> man expr

;)

n°364984
farib
Posté le 25-11-2003 à 10:43:16  profilanswer
 

arf, je vais assayer d'insérer des guillements pour pas que awk se rate avec les noms de fichiers avec espaces
 

TOTO=`ls -l $1| grep -vE ^[dl]| sort -nk 5 | awk '{print $8}' | sed s/\(.*\)/\\"$1\\"/g`


---------------
Bitcoin, Magical Thinking, and Political Ideology
n°364991
arsunik
ma tuxitude me beastifie
Posté le 25-11-2003 à 11:01:29  profilanswer
 

Oula ya des erreurs partout.
Une variable contenant un nom de fichier en bash doit toujours être protégé avec des guillemets (même avec ça, on a des problèmes si le nom de fichier contient des sauts de lignes...).
Mon avis est que ce script est inutilement compliqué et serait plus simple à écrire en perl ou en awk. Admettons que tu fasses ça pour t'amuser. Je te conseille tout de même de le faire en perl après ;)
 
Pour sélectionner un fichier dans ta liste, utilise sed :
echo "$TOTO" | sed -ne ${I}p
(en bash tu as des tableaux mais en sh je ne suis pas sur)
 
De plus ton algo ne fonctionne pas : tu peux avoir 3 fichiers A, B et C de taille identique avec A=C. Tu ne testes ici que A!=B et B!=C...
Il faut comparer deux à deux les fichiers de taille identique.
Fais des fonctions shell pour plus de clareté dans ton code, ça va devenir compliqué :)

mood
Publicité
Posté le 25-11-2003 à 11:01:29  profilanswer
 

n°364992
arsunik
ma tuxitude me beastifie
Posté le 25-11-2003 à 11:05:30  profilanswer
 

farib a écrit :

arf, je vais assayer d'insérer des guillements pour pas que awk se rate avec les noms de fichiers avec espaces


Mauvaise idée, si tu veux protéger un nom de fichier, il faut plutôt échapper tous les caractères. Si tu as des guillemets dans ton nom de fichier, ça va poser pb (nb : ça ne résoud toujours pas le problème des saut de lignes ici).

Code :
  1. echo toto | sed -e 's/\(.\)/\\\1/g'



Message édité par arsunik le 25-11-2003 à 11:05:48

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  aide correction script bash

 

Sujets relatifs
[window maker] aide pour l'installation et utilisation des themes[Samba] script au login et logout du domaine?
script samba client - besoin d'aide[Script] Télécharger des element sur serveur HTTP selon une liste...
Aide pour config Internetaide conseil fichier pdf
besoin d'aide avec mandrake 9.2 <resolu>De l'aide - pas de réseau avec Nforce 2 et MDK 9.2
Editer le script shutdown 
Plus de sujets relatifs à : aide correction script bash


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR