Boucle For et variables
Résolu
barnabe0057
-
barnabe0057 -
barnabe0057 -
Bonjour,
Je suis débutant en Bash, je cherche à mettre 2 valeurs dans 2 variables à l'aide d'une boucle FOR :
Le fichier texte contient une seule ligne, par exemple ceci : 96.247.126.28:25535
Merci d'avance pour votre aide.
Je suis débutant en Bash, je cherche à mettre 2 valeurs dans 2 variables à l'aide d'une boucle FOR :
#! /bin/bash
old_IFS=$IFS # sauvegarde du séparateur de champ
IFS=$':' # nouveau séparateur de champ
i=0
for ligne in $(cat ip_address.txt)
do
i=$((i+1))
champ$i=$ligne
done
IFS=$old_IFS
echo $champ1
echo $champ2
sleep 10m
Le fichier texte contient une seule ligne, par exemple ceci : 96.247.126.28:25535
Merci d'avance pour votre aide.
Configuration: Linux / Firefox 64.0
1 réponse
-
salut,
ce n'est pas comme ça qu'on lit un fichier en shell, on utilise une bouclewhile read
...
mais, comme il n' y a qu'une ligne dans ce fichier (on se demande d'ailleurs la raison d'être de ce fichier), une boucle est i nu tile :IFS=':' read -r adresse port <"$fichier"
-
Ta solution fonctionne très bien ! Merci beaucoup pour ton aide.
Pour expliquer un peu, j'ai scripté (sur Windows) un outil d'administration à distance (VNC over SSH), et maintenant j'ai besoin d'automatiser la création de règles UFW sur mon serveur "relais", ce fichier texte me fournit l'adresse et le port à ouvrir dans le pare-feu. -
ce fichier est le résultat d'une commande ? ou bien est-il fixe, et ne sert-il qu'à stocker de manière pérenne ces deux données ?
dans le premier cas, au lieu d'utiliser un fichier temporaire, il est possible de passer le résultat par une Substitution de processus àread
:IFS=':' read -r ip port < <(commande)
dans le second cas, l'information fixe pourrait figurée directement dans le script. -
Ces données ne sont pas fixes, en fait le client windows envoie son ip (et un port) via curl, un script PHP traite la requête et stocke les infos dans un fichier texte pour que je puisse "ouvrir" l'accès avant que le client n'établisse le tunnel SSH inverse.
Merci pour l'astuce de la substitution de processus, je la garde dans un coin bien au chaud. -
hmm. ça me semble bien lourd; surtout le recours à PHP : il y a des outils/langages beaucoup plus légers (coreutils, sed, awk).
il n'y a pas de raison que tu ne puisses pas faire quelque chsoe comme ça :IFS="$separateur" read -r ip port < <(curl -o - 'http://serveur' | sed 'récupère les données dans le flux HTML')
sans davantage de détails, je ne peux pas donner plus de précision. -
-