Script shell

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!
Configuration: Linux Debian
Epiphany 2.14

45 réponses

Résumé de la discussion

Lire une ligne précise d'un fichier texte dans un script Linux et renvoyer une valeur selon une condition. Plusieurs méthodes reviennent, notamment l'utilisation de sed avec -n suivi de p pour extraire une ligne ou une expression régulière, ou l'usage de awk pour cibler une valeur spécifique. Par exemple, var_IP=$(sed -n '/^Name:/ p' /vérification.txt) permet d'extraire la ligne correspondant au motif Name: et de l'utiliser dans le script. En cas d'exécution via cron, préférez les chemins absolus et explicitez les variables d'environnement, car les différences d'environnement peuvent influencer le fonctionnement du script et le rendu des commandes.

Bobot (l’IA à votre service)
  1. merci c'est gentil et merci aussi de ton aide qui été precieuse jusqu'ici!!!
    0
    1. Modérateur
      Ben le mieux c'est d'attendre qu'ils pointent le bout de leur nez, mais dès que j'en vois un, je lui fais signe, promis ;-))
      0
      1. je ne sais pas trop comment les joindres tu pourrai leur demander de se joindre à la conversation s'il te plait?
        0
        1. Modérateur
          Juste avec "sendmail" ça devrait le faire, mais bon là je passe la main aux spécialistes locaux, du style l'ami Dal (désolé [Dal] d'extropier ton nom, mais les crochets qui le composent me font des misères avec la mise en forme du forum ;-(( ) ou dubcek.

          ;-))
          0
          1. oui le chemin est bien spécifié mais ca n'y change rien et le fichier wav existe et est sur mon bureau.

            je ne veu pas envoyer un mail en local, mais dans un autre domaine par exemple sur une adresse @yahoo.fr mais je pense qu'il faut mettre en place un serveur relais nn?
            0
            1. Modérateur
              là le mot est bien coloré mais c'est la même chose ca ne renvoi rien.
              Le fichier ".wav" existe au moins ? Tu donnes le chemin complet (commande et fichier) ?

              Si j'ajoute à mon script une commande mailx pour envoyé un mail tu pense que ca marchera?
              En interne ? Y'a pas de raisons que ça ne marche pas... ;-))
              0
              1. là le mot est bien coloré mais c'est la même chose ca ne renvoi rien.Ce que je peut faire c'est aussi, à la place d'une alerte, c'est envoyer un mail automatiquement à une personne si le serveur dns présente un disfonctionnement. Si j'ajoute à mon script une commande mailx pour envoyé un mail tu pense que ca marchera?
                0
                1. Modérateur
                  1 - C'est ce que j'avais pensé aussi, à exploiter donc...

                  2 - Que répond la commande :
                  whereis play artsplay
                  ???
                  0
                  1. je pense que le premier souci vien du crontab.
                    Etant lancé automatiquement tout les deux en même temps il se peut que le "vérification.txt" soit en train de se mettre à jour pendant que le deuxieme script s''éxecute ce qui fait concrètement que lorsque le fichier test2.sh cherche la 6 ieme ligne, il ne trouve rien pendant cette petite periode de mis à jour et donc me genere un disfonctionnement.
                    qu'en penses-tu?

                    pour la commande play c'est simple lorqu'une commande existe sous shell, quand tu fait le script elle change de couleur un fois tapé comme le "echo" ou le "if" le "else"...
                    je l'ai tout de même tapé mé cela ne renvoi rien.J'ai même essayé sous le terminal mais rien.
                    0
                    1. Modérateur
                      Ben désolé, je ne vois pas d'où ça peut venir ;-((

                      autre chose la commande " play /.../../....wav "ne fonctionne pas
                      C'est à dire ???
                      Essaye avec "artsplay" alors...
                      0
                      1. dans vérification.txt le message change lorsque le service dns ne répon pas ce qui fait que la ligne 6 n'est plus la meme et que par conséquent le message devient "disfonctionnement........."

                        Quand je lance le script manuellement je n'ai jamais d'erreur.Ce n'est que lorsque je le lance via crontab qu'il déringole.

                        pour le crontab je me suis trompé quand j'ai copier son contenu les scripts appelé sont bien différents.

                        autre chose la commande " play /.../../....wav "ne fonctionne pas
                        0
                        1. Modérateur
                          Re-

                          Deux petites choses...

                          Est-ce que quand ton server est down, le message dans "/vérification.txt" est le même ?
                          Est-ce que la "ligne 6" contient toujours "Name:..." ?
                          Je serai toi, j'écrirai plutôt la commande "sed" comme suit :
                          var_IP=$(sed -n '/^Name:/ p' /vérification.txt) 
                          Seconde chose, dans ta crontab c'est le même script qui est appelé :
                          * * * * 1-5 /home/chetouane/Desktop/test2.sh
                          * * * * 1-5 /home/chetouane/Desktop/test2.sh
                          ;-((
                          0
                          1. salut jipicy,

                            tien voila le premier script : test.sh

                            #!/bin/bash
                            nslookup www.ma-convention-collective.com -server 194.50.127.100 > /vérification.txt

                            exit 0


                            ce script interroge le server DNS pour avoir la résolution.

                            et le second test2.sh

                            test2.sh
                            #!/bin/bash

                            var_IP=$(sed -n '6 p' /vérification.txt)

                            if [ "$var_IP" = 'Name: ma-convention-collective.com' ] ;
                            then

                            echo "le service DNS fonctionne correctement" >> /home/chetouane/Desktop/résultat.txt

                            cat /vérification.txt >> /home/chetouane/Desktop/résultat.txt

                            else

                            echo "ATTENTION ! le service DNS présente un disfonctionnement " >> /home/chetouane/Desktop/résultat.txt

                            cat /vérification.txt >> /home/chetouane/Desktop/résultat.txt
                            fi

                            exit 0


                            cet autre script utilise le fichier généré par le premier script pour afficher un message notamment dans le cas ou le le service DNS ne ferai pas la résolution.

                            J'ai mis ces deux fichiers executable sous crontab pour qu'ils se lancent automatiquement toutes les minutes.
                            Ceci, pour avoir un test régulier du service DNS.
                            Le souci comme je te le disais est que en principe sans disfonctionnement particulier je devrai toujour avoir le message "le service dns fonctionne correctement" or ce n'est pas le cas de temps en temps j'ai une petite alerte alors que le service DNS ne présente aucun disfonctionnement.

                            voila le fichier crontab ou tu peut voir les deux fichiers executable .

                            28,23,38,53 * * * * /opt/psa/admin/sbin/backupmng >$pmng >/dev/null 2>&1
                            * * * * 1-5 /home/chetouane/Desktop/test2.sh
                            * * * * 1-5 /home/chetouane/Desktop/test2.sh
                            0
                            1. d'accord je t'afficherai ça lundi sans faute mes documents sont au bureau!

                              merci.
                              0
                              1. Modérateur
                                Affiche le contenu de ton script, on n'est pas devin ;-))
                                Affiche aussi ta crontab...
                                0
                                1. salut ,

                                  j'ai un autre souci, mon script fonctionne correctement tou va bien, meme quand je simule une panne du service dns mais c'est au niveau de l'affichage de la phrase que ca cloche une fois le script m'affiche tou va bien juste après sans aucune raison il m'affiche que j'ai un disfonctionnement.tou cela seulement quand je lance mon script automatiquement (via crontab).je ne comprend pas qu'il m'affiche qu'il ya un disfonctionnement alors que quand je lance le script manuellement il n'y a pas de souci!!!!!!
                                  0
                                  1. Modérateur
                                    Re-

                                    Regarde du côté de la commande "play" :
                                    play /chemin/fichier.wav
                                    ;-))
                                    0
                                    1. Mais dit moi j'ai envi, j'ai envi d'aller un peu plus loin et d'ajouter dans mon script, une fonction qui permetterai de generer un signal sonore si une condition n'est pas réalisé.(si mon serveur dns présente un disfonctionnement).Aurai tu une idée?
                                      0
                                      1. salut jipicy,

                                        normalement c'est bon tout est ok le script fonctionne merci encore pour ton aide!!!!
                                        0
                                        • 1
                                        • 2
                                        • 3