Script shell
Fermé
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
-
6 févr. 2008 à 15:00
unix02 - 11 févr. 2008 à 11:38
unix02 - 11 févr. 2008 à 11:38
Bonjour,
je voudrais savoir comment peut-on lire(et non pas afficher) un fichier texte à partir d'un script car je voudrai réaliser un script qui lira dans ce fichier texte une ligne en particulier pour renvoyer une certaine valeur si la condition est réalisé.
merci d'avance de votre aide!
je voudrais savoir comment peut-on lire(et non pas afficher) un fichier texte à partir d'un script car je voudrai réaliser un script qui lira dans ce fichier texte une ligne en particulier pour renvoyer une certaine valeur si la condition est réalisé.
merci d'avance de votre aide!
A voir également:
- Script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
45 réponses
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
6 févr. 2008 à 15:02
6 févr. 2008 à 15:02
désolé, j'ai oublié de preciser que ce script est en shell
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
6 févr. 2008 à 15:10
6 févr. 2008 à 15:10
Salut,
Avec "grep", "sed" ou "awk"...
Mais donnes-nous un exemple bien précis, avec fichier d'entrée, ce que tu veux récupérer, comment et ce que tu veux en faire et si nécessaire le résultat escompté en sortie.
;-))
Avec "grep", "sed" ou "awk"...
Mais donnes-nous un exemple bien précis, avec fichier d'entrée, ce que tu veux récupérer, comment et ce que tu veux en faire et si nécessaire le résultat escompté en sortie.
;-))
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
6 févr. 2008 à 15:29
6 févr. 2008 à 15:29
salut, merci de ta réponse
En fait j'ai commencer par creer un script qui test le fonctionnement d'un de mes serveur dns.
ce script lance automatiquement la commande " nslookup www.xxxxx.fr server ..nomduserveur..." cette commnde me permet de savoir si mon serveur dns fait bien la résolution.
Ensuite j'ai voulu afficher ce résultat dans un fichier texte à part, ce qui fait que maintenant dans mon fichier texte j'ai la reponse à la requete nslookup comme tu l'a vu précédement.
je voudrais à partir de ces quelques lignes obtenu créer un nouveau script qui serait en mesure de m'afficher un message du style "votre serveur fonctionne correctement" ou l'inverse.
d'ou cette nécéssité de lire une des lignes du fichier texte.
je la lis, je la met dans une variable et je peut faire mon script.
ca c'est le script qui execute le test :
#!/bin/bash
echo Verification du fonctionnement du seveur DNS
echo Verification du fonctionnement du seveur DNS > /home/Desktop/vérification.sh
echo serveur 194.50.127.100
var=oui
while [ "$var" = "oui" ] || [ "$var2" = "oui" ] ;
do
nslookup www.ma-convention-collective.com -server 194.50.127.100 > /home/Desktop/vérification.sh
sleep 1
echo Le serveur fonctionne correctement si il n'y a pas d'erreur générée!
echo -n "voulez-vous refaire un test? oui/non: "
read var2
var=var2
done
echo "Au revoir!"
exit 0
voila si tu veu que je te reexplque ya pas de souci!!!
En fait j'ai commencer par creer un script qui test le fonctionnement d'un de mes serveur dns.
ce script lance automatiquement la commande " nslookup www.xxxxx.fr server ..nomduserveur..." cette commnde me permet de savoir si mon serveur dns fait bien la résolution.
Ensuite j'ai voulu afficher ce résultat dans un fichier texte à part, ce qui fait que maintenant dans mon fichier texte j'ai la reponse à la requete nslookup comme tu l'a vu précédement.
je voudrais à partir de ces quelques lignes obtenu créer un nouveau script qui serait en mesure de m'afficher un message du style "votre serveur fonctionne correctement" ou l'inverse.
d'ou cette nécéssité de lire une des lignes du fichier texte.
je la lis, je la met dans une variable et je peut faire mon script.
ca c'est le script qui execute le test :
#!/bin/bash
echo Verification du fonctionnement du seveur DNS
echo Verification du fonctionnement du seveur DNS > /home/Desktop/vérification.sh
echo serveur 194.50.127.100
var=oui
while [ "$var" = "oui" ] || [ "$var2" = "oui" ] ;
do
nslookup www.ma-convention-collective.com -server 194.50.127.100 > /home/Desktop/vérification.sh
sleep 1
echo Le serveur fonctionne correctement si il n'y a pas d'erreur générée!
echo -n "voulez-vous refaire un test? oui/non: "
read var2
var=var2
done
echo "Au revoir!"
exit 0
voila si tu veu que je te reexplque ya pas de souci!!!
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
6 févr. 2008 à 15:45
6 févr. 2008 à 15:45
je voudrais à partir de ces quelques lignes obtenu
A quoi ressemblent ces quelques lignes et surtout que veux-tu récupérer dans ces quelques lignes ???
A quoi ressemblent ces quelques lignes et surtout que veux-tu récupérer dans ces quelques lignes ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
6 févr. 2008 à 15:53
6 févr. 2008 à 15:53
le fichier qui est créer automatiquement est vérification.sh il contient ca :
*** Invalid option: server
Server: 194.50.127.100
Address: 194.50.127.100#53
www.ma-convention-collective.com canonical name = ma-convention-collective.com.
Name: ma-convention-collective.com
Address: 194.50.127.12
tu obtiendra la meme chose si tu fait un nslookup sur le terminal.
ps: je l'ai mis en ".sh" pour pouvoir ecrire un script en dessous et pouvoir l'executer.
je veu récuperer dans ces quelque ligne la derniere a savoir "adresse : 194.50.127.12"
*** Invalid option: server
Server: 194.50.127.100
Address: 194.50.127.100#53
www.ma-convention-collective.com canonical name = ma-convention-collective.com.
Name: ma-convention-collective.com
Address: 194.50.127.12
tu obtiendra la meme chose si tu fait un nslookup sur le terminal.
ps: je l'ai mis en ".sh" pour pouvoir ecrire un script en dessous et pouvoir l'executer.
je veu récuperer dans ces quelque ligne la derniere a savoir "adresse : 194.50.127.12"
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
6 févr. 2008 à 16:06
6 févr. 2008 à 16:06
$ cat fich.txt *** Invalid option: server Server: 194.50.127.100 Address: 194.50.127.100#53 www.ma-convention-collective.com canonical name = ma-convention-collective.com. Name: ma-convention-collective.com Address: 194.50.127.12 $ sed -n '$ s/.*: \(.*\)/\1/p' fich.txt 194.50.127.12 $;-))
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 07:55
7 févr. 2008 à 07:55
salut,
merci c 'est cool, mais si tu pouvai juste m'expliquer ce que tu as fait ça m'aiderai à y comprendre davantage.
merci c 'est cool, mais si tu pouvai juste m'expliquer ce que tu as fait ça m'aiderai à y comprendre davantage.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
7 févr. 2008 à 09:41
7 févr. 2008 à 09:41
sed -n
L'éditeur "sed" (éditeur de flux), avec l'option "-n" pour ne rien afficher en sortie sauf si c'est demandé avec le tag "p" en fin d'expression
$
Symbole représentant la dernière ligne. Donc on demande de cibler uniquement la dernière ligne.
s
La commande "s" pour substitution
/
Le délimiteur pour la commande "s"
.*:
(Attention il y a un espace derrière les deux points)
Expression régulière demandant de prendre tout ce qui se trouve avant les 2 points (:) plus l'espace derrière ces 2 points.
\(
Marque le début d'une sous expression.
.*
Expression régulière matchant la sous-expression. Dans ton cas la sous-expression matchera donc tout ce qui se trouve après l'espace suivant les deux points et ce jusqu'à la fin de la ligne, autrement dit l'adresse IP
\)
Marque la fin de la sous expression
/
Le délimiteur pour la commande "s"
\1
La référence à la 1ère sous-expression, ce qui est entre les parenthèses
/
Le délimiteur de fin pour la commande "s"
p
Le tag demandant l'affichage de la sous-expression, l'adresse IP.
;-))
L'éditeur "sed" (éditeur de flux), avec l'option "-n" pour ne rien afficher en sortie sauf si c'est demandé avec le tag "p" en fin d'expression
$
Symbole représentant la dernière ligne. Donc on demande de cibler uniquement la dernière ligne.
s
La commande "s" pour substitution
/
Le délimiteur pour la commande "s"
.*:
(Attention il y a un espace derrière les deux points)
Expression régulière demandant de prendre tout ce qui se trouve avant les 2 points (:) plus l'espace derrière ces 2 points.
\(
Marque le début d'une sous expression.
.*
Expression régulière matchant la sous-expression. Dans ton cas la sous-expression matchera donc tout ce qui se trouve après l'espace suivant les deux points et ce jusqu'à la fin de la ligne, autrement dit l'adresse IP
\)
Marque la fin de la sous expression
/
Le délimiteur pour la commande "s"
\1
La référence à la 1ère sous-expression, ce qui est entre les parenthèses
/
Le délimiteur de fin pour la commande "s"
p
Le tag demandant l'affichage de la sous-expression, l'adresse IP.
;-))
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 10:02
7 févr. 2008 à 10:02
merci mais je le met ou dans un nouveau script, à la suite d'un autre? Et le "cat" que tu as affiché en haut?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
7 févr. 2008 à 10:09
7 févr. 2008 à 10:09
Le "cat" c'était pour faire les essais et te montrer comment récupérer la dernière ligne...
Ben la commande tu la mets dans ton script à l'endroit où tu veux faire ton test !
Tu as demandé à récupérer la valeur de l'adresse IP contenue dans un fichier pour faire un test dessus, donc maintenant que tu sais récupérer cette valeur, il ne te reste plus qu'à faire le test et afficher ce que tu veux en fonction du résultat ;-))
Ben la commande tu la mets dans ton script à l'endroit où tu veux faire ton test !
Tu as demandé à récupérer la valeur de l'adresse IP contenue dans un fichier pour faire un test dessus, donc maintenant que tu sais récupérer cette valeur, il ne te reste plus qu'à faire le test et afficher ce que tu veux en fonction du résultat ;-))
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 10:15
7 févr. 2008 à 10:15
la commande
$ sed -n '$ s/.*: \(.*\)/\1/p' fich.txt
ne fonctionne me fait bueuger le script en revanche si j'enlève le sugne "$" comme ceci
sed -n '$ s/.*: \(.*\)/\1/p' fich.txt
ça me renvoi rien du tout mon script répond comme d'habitude.
je voudrai affecter cette ip à une variable mais là je ne vois pas de variable????.
$ sed -n '$ s/.*: \(.*\)/\1/p' fich.txt
ne fonctionne me fait bueuger le script en revanche si j'enlève le sugne "$" comme ceci
sed -n '$ s/.*: \(.*\)/\1/p' fich.txt
ça me renvoi rien du tout mon script répond comme d'habitude.
je voudrai affecter cette ip à une variable mais là je ne vois pas de variable????.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
7 févr. 2008 à 10:25
7 févr. 2008 à 10:25
Le signe "$" (dollar) devant la commande c'est l'invite de mon prompt :-(((
C'est clair que si tu le tapes aussi avant la commande ça buggue ;-))
Pour affecter le résultat de la commande à une variable :
C'est clair que si tu le tapes aussi avant la commande ça buggue ;-))
Pour affecter le résultat de la commande à une variable :
var_IP=$(sed -n '$ s/.*: \(.*\)/\1/p' fich.txt);-))
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 10:32
7 févr. 2008 à 10:32
bon admettons que je fasse ça :
#!/bin/bash
var_IP=$(sed -n '$ s/.*: \(.*\)/\1/p' /home/Desktop/vérification.txt)
echo $var_ip
exit 0
ca devrait bien m'afficher la derniere ligne vérification.txt.Et bien pourtant rien du tout, ca ne m'affiche rien.
#!/bin/bash
var_IP=$(sed -n '$ s/.*: \(.*\)/\1/p' /home/Desktop/vérification.txt)
echo $var_ip
exit 0
ca devrait bien m'afficher la derniere ligne vérification.txt.Et bien pourtant rien du tout, ca ne m'affiche rien.
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 10:34
7 févr. 2008 à 10:34
bon d'accord le echo $var_ip devrait etre echo $var_Ip mais ca ne change rien lol.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
7 févr. 2008 à 10:37
7 févr. 2008 à 10:37
echo $var_IP plutôt même ;-))
Affiche :
Affiche :
sed -n '$ p' /home/Desktop/vérification.txt
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 10:41
7 févr. 2008 à 10:41
looooooool non ca ne marche pas non plus.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
7 févr. 2008 à 10:45
7 févr. 2008 à 10:45
N'y-aurait-il pas une ligne vide à la fin de ton fichier "vérification.txt" par hasard ?
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 10:51
7 févr. 2008 à 10:51
j'avoue que tu as été très fin sur ce coup là!!!!!! en effet il y avait un caractère ( le genre de caractère invisible au niveau de cette touche ~)
donc oui c bon jai reussi à récuperer la ligne dans la variable var_IP maintenant je vais tenter le test, je te tiens informé.
donc oui c bon jai reussi à récuperer la ligne dans la variable var_IP maintenant je vais tenter le test, je te tiens informé.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
7 févr. 2008 à 11:13
7 févr. 2008 à 11:13
Salut,
j'avoue que tu as été très fin sur ce coup là!!!!!!
c'est normal, il est un jeune avec expérience ;-)))
j'avoue que tu as été très fin sur ce coup là!!!!!!
c'est normal, il est un jeune avec expérience ;-)))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
>
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
7 févr. 2008 à 11:30
7 févr. 2008 à 11:30
:-))
unix02
Messages postés
17
Date d'inscription
mercredi 6 février 2008
Statut
Membre
Dernière intervention
8 février 2008
7 févr. 2008 à 11:46
7 févr. 2008 à 11:46
jipicy, pourrai tu me redonner cette commande
var_IP=$(sed -n '$ p' /home/Desktop/vérification.txt)
Mais cette fois ci pour la premiere ligne.
parceque apparement lorsque le script se relance le caractere ~ invible revient lui aussi et mon dernier script m'affiche toujour que j'ai un disfonctionnement.
var_IP=$(sed -n '$ p' /home/Desktop/vérification.txt)
Mais cette fois ci pour la premiere ligne.
parceque apparement lorsque le script se relance le caractere ~ invible revient lui aussi et mon dernier script m'affiche toujour que j'ai un disfonctionnement.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
7 févr. 2008 à 12:04
7 févr. 2008 à 12:04
Essaie de changer la commande sed par celle-ci :
sed -ne ':boucle;h;n;$!b boucle;g;p'Parce que je suppose que ton fichier contiendra toujours ce caractère invisible sur la dernière ligne...