2017-08-30 2 views
0

J'essaye de créer un script dans bash pour envoyer un ping aux adresses à la fois. Les adresses sont toujours 1 sur celle que l'utilisateur a tapée.+1 sur une chaîne d'entrée IPv4 dans un script bash

Exemple: Qu'est-ce que l'ip? 192.168.0.10

Le programme doit envoyer une requête ping à 192.168.0.10 et 192.168.0.11. Enfin, il devrait donner une sortie ping.

J'ai des problèmes d'incrémentation sur le dernier chiffre de l'ip. Mon code:

#!/bin/bash 
# Script for å pinge to lokasjoner samtidig. 

read input 
echo $input 
ip1=$input 

let "ip2=$input+1" 

echo $ip1 
echo $ip2 

Comme vous pouvez le voir, j'ai un long chemin à parcourir. Mais ma première question est de savoir comment incrémenter seulement les derniers chiffres de l'entrée.

Répondre

0

alternatif Awk:

ip="192.168.0.10" 
ip2=$(awk -F\. '{ print $1"."$2"."$3"."$4+1 }' <<< $ip) 
echo $ip2 
192.168.0.11 

Lire l'adresse IP d'origine dans awk et champs séparés avec "." Ajouter 1 au dernier champ, puis définissez-le dans la variable ip2

+0

cela échouera si le dernier octet est 255 –

1

utilisant l'expansion variable et l'expansion arithmétique

ip2=${ip1%.*}.$((${ip1##*.}+1)) 
  • ${ip1%.*} supprime le plus court suffixe. * (Dernier numéro)
  • ${ip1##*.} supprime le plus grand préfixe *. (À l'exception du dernier numéro)
+0

cela donnera '192.168.011 ' - manqué '.' – RomanPerekhrest

+0

mis à jour avec l'explication –

0

Vous devez traiter vos ip1 octets séparément:

part1=${ip1%.*}"."  # first 3 octets (with trailing separator `.`) 
part2=${ip1##*.}  # last octet 
ip2=$part1$[$part2+1] 

printf "%s\n%s\n" $ip1 $ip2 

L'exemple de sortie:

192.168.0.10 
192.168.0.11