Lire chaque ligne d'un fichier txt en bash
Fermé
Virtual76
Messages postés
14
Date d'inscription
vendredi 20 mai 2016
Statut
Membre
Dernière intervention
8 juillet 2016
-
20 mai 2016 à 16:05
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 - 24 mai 2016 à 11:30
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 - 24 mai 2016 à 11:30
A voir également:
- Bash lire un fichier ligne par ligne
- Lire le coran en français pdf - Télécharger - Histoire & Religion
- Fichier rar - Guide
- Apparaitre hors ligne instagram - Guide
- Vente en ligne particulier - Guide
- Aller à la ligne excel - Guide
3 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 408
20 mai 2016 à 16:15
20 mai 2016 à 16:15
Salut,
$ cat fich
Machine1 192.168.10.1
Machine2 192.168.10.2
Machine3 192.168.10.3
Machine4 192.168.10.4
Machine5 192.168.10.5
$ while read ligne; do echo "${ligne% *} : ssh ${ligne#* }"; done < fich
Machine1 : ssh 192.168.10.1
Machine2 : ssh 192.168.10.2
Machine3 : ssh 192.168.10.3
Machine4 : ssh 192.168.10.4
Machine5 : ssh 192.168.10.5
Utilisateur anonyme
20 mai 2016 à 18:13
20 mai 2016 à 18:13
Si tu veux garder ta boucle for (et ton cut), le problème est l'IFS (caractère considéré comme séparateur de paramètres).
(copyright zip31, tous droits reservés)
$cat ip
Machine1 192.168.10.1
Machine2 192.168.10.2
Machine3 192.168.10.3
Machine4 192.168.10.4
Machine5 192.168.10.5
(copyright zip31, tous droits reservés)
$cat script.sh
#!/bin/bash
saveIFS="$IFS"
IFS="
"
for line in `cat ip`
do
IP=`echo $line | cut -d\ -f2`
echo "ip courrante : $IP"
done
IFS="$savIFS"
$./script.sh
ip courrante : 192.168.10.1
ip courrante : 192.168.10.2
ip courrante : 192.168.10.3
ip courrante : 192.168.10.4
ip courrante : 192.168.10.5
Virtual76
Messages postés
14
Date d'inscription
vendredi 20 mai 2016
Statut
Membre
Dernière intervention
8 juillet 2016
24 mai 2016 à 11:17
24 mai 2016 à 11:17
Bonjour à tous,
Merci de vos réponses, j'ai trouvé une solution et ça fonctionne.
Pour ceux que ça peut intéresser voici mon script:
Néanmoins, j'ai un nouveau souci lié au fait que j’exécute un autre script par le biais d'une connexion SSH.
le fichier "MONSCRIPT.bash" contient plusieurs commande dont celle là :
le but étant de récupérer la version de la distribution dans une variable.
J'obtiens l'erreur suivante:
"cat: /etc/os-release/: Aucun fichier ou dossier de ce type"
Le dossier existe bien sur la machine distante, et quand j’exécute la commande en direct sans passer par une connexion SSH, elle fonctionne correctement.
Quelqu'un a-t-il une idée?
Merci
Merci de vos réponses, j'ai trouvé une solution et ça fonctionne.
Pour ceux que ça peut intéresser voici mon script:
#!/bin/bash
saveIFS="$IFS"
IFS="
"
for line in `cat Liste.txt`
do
IP=`echo $line | cut -d' ' -f 2-`
HOST=`echo $line | cut -d' ' -f 1 -`
echo "Connexion sur $HOST"
echo "Entrez un login"
read USER
echo "Entrez le mdp associé à ce Login"
clear
echo "Connexion en cours sur $HOST (IP=$IP) avec le login : $USER"
ssh "$USER"@"$IP" 'bash -s' < MONSCRIPT.bash
done
IFS="$savIFS"
Néanmoins, j'ai un nouveau souci lié au fait que j’exécute un autre script par le biais d'une connexion SSH.
le fichier "MONSCRIPT.bash" contient plusieurs commande dont celle là :
versiondistri=`cat /etc/os-release/ | grep "^VERSION_ID=" | cut -d= -f2- | sed 's/"//g'`
le but étant de récupérer la version de la distribution dans une variable.
J'obtiens l'erreur suivante:
"cat: /etc/os-release/: Aucun fichier ou dossier de ce type"
Le dossier existe bien sur la machine distante, et quand j’exécute la commande en direct sans passer par une connexion SSH, elle fonctionne correctement.
Quelqu'un a-t-il une idée?
Merci
UnGnU
Messages postés
1158
Date d'inscription
lundi 2 mai 2016
Statut
Contributeur
Dernière intervention
22 décembre 2020
156
24 mai 2016 à 11:30
24 mai 2016 à 11:30
Salut,
Enlève le slash en fin de commande et ça devrait aller mieux ;-\
Sinon :
Ou encore :
Enlève le slash en fin de commande et ça devrait aller mieux ;-\
cat /etc/os-release
Sinon :
$ grep -Po 'VERSION_ID="\K[^"]' /etc/os-release
8
Ou encore :
$ lsb_release -rs
8.4