Boucle For et variables

Résolu/Fermé
barnabe0057 - Modifié le 28 déc. 2018 à 17:24
 barnabe0057 - 28 déc. 2018 à 19:29
Bonjour,

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
A voir également:

1 réponse

lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13
Modifié le 28 déc. 2018 à 17:33
salut,

ce n'est pas comme ça qu'on lit un fichier en shell, on utilise une boucle
while 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"
1
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.
0
lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13 > barnabe0057
28 déc. 2018 à 17:47
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.
0
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.
0
lEprofSonDkon Messages postés 211 Date d'inscription jeudi 13 décembre 2018 Statut Membre Dernière intervention 8 octobre 2022 13 > barnabe0057
28 déc. 2018 à 18:28
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.
0
J'ai déjà une plateforme LEMP qui tourne sur mon serveur dédié pour d'autres services, HTML/PHP me semble la solution idéale pour contourner le pare-feu du client afin de recevoir son adresse ip.
0