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

  FORUM HardWare.fr
  Linux et OS Alternatifs

  [script] recréer sa base RPM avec un script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[script] recréer sa base RPM avec un script

n°91634
Mjules
Modérateur
Parle dans le vide
Posté le 26-04-2002 à 20:05:25  profilanswer
 

Salut tout le monde
 
bon, ça y est, je me suis lancé, j'ai utilisé le script qui est en dernier topic. et c'est fait, ma base RPM est complètement refaite (pour la plus grande partie en tout cas, je peux pas vérifier pour tout les paquetages ;) )
 
Je tiens à remercier nicotine et JBM pour leurs conseils avisés.
MERCI
 
Message original:
Bonjour,
 
Je cherche une commande shell (ou un soft, je suis pas à ça pres) pour lire une ligne donnée dans un fichier texte et me l'envoyer dans une variable.
 
Merci

 

[jfdsdjhfuetppo]--Message édité par Mjules le 29-04-2002 à 19:24:14--[/jfdsdjhfuetppo]


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
mood
Publicité
Posté le 26-04-2002 à 20:05:25  profilanswer
 

n°91640
nicotine
Posté le 26-04-2002 à 20:28:38  profilanswer
 

tu peux detailler stp ?  
 
sinon  
 
toto=`grep machin truc.txt`

n°91646
Mjules
Modérateur
Parle dans le vide
Posté le 26-04-2002 à 21:01:06  profilanswer
 

en fait, je voudrais un truc qui permette de lire la n-ième  ligne d'un fichier texte et me la copier dans une variable
genre:
lire ligne1 mon_fichier > $variable
 
en fait, je cherche toujours à faire mon script pour refaire ma base des RPMS à partir de ceux de mon CD d'install et des fichiers présents sur mon dur.
 
pour l'instant, j'ai déjà (comme début de script) :

#!/bin/sh
 
#il faut etre dans le dossier ou il y a les RPMS
#liste les RPMS et écrit la liste dans /$HOME/listerpm
dir *.rpm > /$HOME/listerpm

là, j'arrive au point litigieux puisqu'il faut que je lise une ligne du fichier listerpm

num=1
while ligne $num de listrpm == 0 ; do  # jusqu'à ce que la   ligne n de listerpm soit vide  (chose que je ne sais pas écrire)
# je lis la n° ligne de listerpm et j'inscris sa valeur dans # le fichier RPM1
 
head -n $num /$HOME/listerpm | tail -1 >/$HOME/RPM1  
 
# je liste les fichiers de doc contenus dans le fichier RPM1
# et je les inscrit dans listfich
rpm -ql --docfiles -p "/$HOME/RPM1" >/$HOME/listfich
 
head -n 1 /$HOME/listfich>/$HOME/DOC1 # je lis la 1° ligne et je l'inscrit dans DOC1
 
if locate "DOC1"  # sauf que là, je sais pas l'écrire (parce que la commande là, elle marche pas :( )
then ajouter "/$HOME/RPM1" /$HOME/listinst # là, je veux écrire une ligne dans un fichier,à la suite des autres lignes et qui contient le texte de RPM1
 
fi
 
num=$[$num+1]
done
 
#maintenant je peux updater ma base avec les paquetages qui sont sur mon système
 
rpm -U --nodeps --justdb "/$HOME/listinst"
 

 
Voilà, c'est fini, peut tu me dire quelles améliorations je peux y apporter et quelles commandes il faut que je tapes pour :

  • trouver un fichier dont le nom complet (chemin+nom) est dans un autre fichier
  • tester si une ligne est vide ou non
  • inscrire une ligne dans un fichier


merci

 

[jfdsdjhfuetppo]--Message édité par Mjules le 26-04-2002 à 21:53:15--[/jfdsdjhfuetppo]


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
n°91648
nicotine
Posté le 26-04-2002 à 21:13:56  profilanswer
 

pourquoi vouloir lire un numero de ligne ?  
 
peut etre existe t il une autre maniere d'apprehender le probleme ?  
 
sinon  
 
num=10
head $num fichier | tail -1

 

[jfdsdjhfuetppo]--Message édité par nicotine le 26-04-2002 à 21:16:14--[/jfdsdjhfuetppo]

n°91649
nicotine
Posté le 26-04-2002 à 21:18:14  profilanswer
 

plus precisement (testé)  
 
head -n $num <fichier> | tail -1

n°91656
Mjules
Modérateur
Parle dans le vide
Posté le 26-04-2002 à 21:26:50  profilanswer
 

nicotine a écrit a écrit :

pourquoi vouloir lire un numero de ligne ?  
 
peut etre existe t il une autre maniere d'apprehender le probleme ?  
 
sinon  
 
num=10
head $num fichier | tail -1  




 
Merci pour la réponse. J'écris mon script et dans 10 min je poste le pourquoi et le comment.


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
n°91667
Mjules
Modérateur
Parle dans le vide
Posté le 26-04-2002 à 21:57:35  profilanswer
 

Bon je vais reposter le script pour qu'il soit un peu + lisible:
 

#!/bin/sh

 
#il faut etre dans le dossier ou il y a les RPMS
#liste les RPMS et écrit la liste dans /$HOME/listerpm

 
dir *.rpm > /$HOME/listerpm
 
num=1
 
while ligne $num de listrpm == 0 ; do  # jusqu'à ce que la   ligne n de listerpm soit vide  (chose que je ne sais pas écrire)
# je lis la n° ligne de listerpm et j'inscris sa valeur dans # le fichier RPM1

 
head -n $num /$HOME/listerpm | tail -1 >/$HOME/RPM1  
 
# je liste les fichiers de doc contenus dans le fichier RPM1
# et je les inscrit dans listfich

rpm -ql --docfiles -p "/$HOME/RPM1" >/$HOME/listfich
 
head -n 1 /$HOME/listfich>/$HOME/DOC1 # je lis la 1° ligne et je l'inscrit dans DOC1

 
if locate "DOC1"  # sauf que là, je sais pas l'écrire (parce que la commande là, elle marche pas   )
 
then ajouter "/$HOME/RPM1" /$HOME/listinst # là, je veux écrire une ligne dans un fichier,à la suite des autres lignes et qui contient le texte de RPM1
 
fi
num=$[$num+1]
done
 
#maintenant je peux updater ma base avec les paquetages qui sont sur mon système
 
rpm -U --nodeps --justdb "/$HOME/listinst"

 
Voilà, c'est fini, peut tu me dire quelles améliorations je peux y apporter et quelles commandes il faut que je tapes pour :

  • trouver un fichier dont le nom complet (chemin+nom) est dans un autre fichier
  • tester si une ligne est vide ou non
  • inscrire une ligne dans un fichier

merci


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
n°91676
Jar Jar
Intaigriste
Posté le 26-04-2002 à 22:41:37  profilanswer
 

variable=`awk 'NR==numéro'`


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°91839
JBM
Posté le 27-04-2002 à 04:49:57  profilanswer
 

Je ne comprends pas trop ce que tu cherches à faire dans ton script mais je peux te proposer quelques améliorations possibles :
 

  • Pour lister des fichiers, utilise plutôt ls à la place de dir, on n'est pas chez Microsoft et même si cette commande est présente sur ta distribution, elle ne l'est pas forcément sur tous les Unix ;)


  • Au lieu d'utiliser une boucle while avec un compteur, utilise plutôt une boucle for de la forme :  
Code :
  1. for ligne in `cat /$HOME/listerpm`
  2. do
  3. ...
  4. done


 
De cette manière, tu auras le contenu ligne par ligne du fichier listerpm dans $ligne à chaque passage dans la boucle.
 

  • A la place du locate..., utilise la commande find avec pour syntaxe :
Code :
  1. find / --name <nom fichier>

et si tu veux executer quelque chose si le fichier est trouvé, rajoute

Code :
  1. --exec commande \;


 

  • Enfin, pour rajouter une ligne à la suite d'un fichier, utilise tout simplement la redirection ">>" et tu peux utiliser la commande cat pour afficher le contenu d'un fichier.


Mais précise un peu plus ce que tu cherches à faire...

 

[jfdsdjhfuetppo]--Message édité par JBM le 27-04-2002 à 04:51:51--[/jfdsdjhfuetppo]

n°91908
Mjules
Modérateur
Parle dans le vide
Posté le 27-04-2002 à 13:14:03  profilanswer
 

merci pour toutes ces réponses;
 
ce que je cherche à faire, c'est à recréer ma base de donnée des paquetages installés parce que elle a planté et j'ai été obligé d'en recréer une vide.
Comme j'avais pas envie d'updater la base à la main avec tous les paquetages des CD d'install, je me suis dit pourquoi pas essayer de faire un script qui ferait ça.
 
+ de détails là :
http://forum.hardware.fr/forum2.ph [...] p=1&trash=
 
NB: j'ai utiliser la commande DIR parce qu'elle ne met pas d'étoiles à la fin des noms de fichiers. et LOCATE parce que ça cherche bien + vite que FIND

 

[jfdsdjhfuetppo]--Message édité par Mjules le 27-04-2002 à 13:29:13--[/jfdsdjhfuetppo]


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
mood
Publicité
Posté le 27-04-2002 à 13:14:03  profilanswer
 

n°91911
Mjules
Modérateur
Parle dans le vide
Posté le 27-04-2002 à 13:23:37  profilanswer
 

Voilà le script un peu amélioré:
 

#!/bin/sh

 
#il faut etre dans le dossier ou il y a les RPMS
#liste les RPMS et écrit la liste dans /$HOME/listerpm

 
dir *.rpm > /$HOME/listerpm
 
for ligne in `cat /$HOME/listerpm` ; do  # jusqu'à la dernière ligne de listerpm
[g]# je liste les fichiers de doc contenus dans la variable ligne et je les inscrit dans listfich

rpm -ql --docfiles -p "$ligne" >/$HOME/listfich
 
head -n 1 /$HOME/listfich>/$HOME/DOC1 # je lis la 1° ligne et je l'inscrit dans DOC1

 
if locate `cat DOC1`
 
then echo "$ligne" >>/$HOME/listinst # là, je veux écrire une ligne dans un fichier,à la suite des autres lignes et qui contient le texte de $ligne
fi
done
 
#maintenant je peux updater ma base avec les paquetages qui sont sur mon système
 
rpm -U --nodeps --justdb "/$HOME/listinst"

 

[jfdsdjhfuetppo]--Message édité par Mjules le 28-04-2002 à 21:20:00--[/jfdsdjhfuetppo]


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
n°92763
Mjules
Modérateur
Parle dans le vide
Posté le 29-04-2002 à 15:59:49  profilanswer
 

:bounce:
 
Les questions sont toujoutrs valable, est ce que vous voyez qql chose à améliorer ?


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
n°92875
Mjules
Modérateur
Parle dans le vide
Posté le 29-04-2002 à 18:57:15  profilanswer
 

pour ceux que ça intéresse, voilà le script que j'ai utilisé :
 
#!/bin/sh
 
dir *.rpm >/$HOME/listerpm
 
for ligne in `cat /$HOME/listerpm`; do
 rpm -ql --docfiles -p "$ligne" >/$HOME/listfich
 if test -s /$HOME/listfich
  then
   if locate `head -n 1 /$HOME/listfich`
    then echo "$ligne" >>/$HOME/listinst
   fi
  else rpm -ql -p "$ligne" >/$HOME/listfich
   if locate `head -n 1 /$HOME/listfich`
    then echo "$ligne" >>/$HOME/listinst
   fi
 fi
done
 
 
comme ça, je loupe le minimum de paquetages.
 
et ensuite, j'utilise la commande  
rpm -i --nodeps --justdb "/$HOME/listinst"


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.

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

  [script] recréer sa base RPM avec un script

 

Sujets relatifs
UN petit script shell ...Recréer la base de données RPM, appel aux programmeurs et aux autres
Scriptscript shell
je peux rendre un script setuid root ?executer un bloc pl/sql à partir d'un shell script...
Mandrake basé sur red hat ?[kernel] installation via un script
Plus de sujets relatifs à : [script] recréer sa base RPM avec un script


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