2009-04-16 9 views
0

travailler avec Cygwin et l'écriture d'un script pour montrer mon mon adresse IP actuelle moins 2. Pour une raison quelconque, il me donne l'erreur follwing: «) erreur de syntaxe: opérateur arithmétique non valide (jeton d'erreur est »opérateur arithmétique invalide

c'est le script que je me sers.

$ cat test3.sh 
#!/bin/bash 
# 
function IPADDRESS { 
    v=$4 
    echo $1.$2.$3.$((v-2)) 
} 
ADDRESS=$(ipconfig | grep Address | cut -f2 -d :) 
# echo $ADDRESS 
IPADDRESS ${ADDRESS//\./ } 

toute aide ou suggestion apprieciated!

Répondre

4

Vous avez bien quelques problèmes avec ce script. le principal est que ipconfig affichera « \ r "caractères à la fin de la ligne qui enfle le calcu lation.

Une autre est que vous n'acceptez pas plusieurs cartes réseau, d'où mon ajout de "head -1". Vous devrez sélectionner la carte réseau que vous voulez un peu plus intelligemment.

Enfin, j'ai supprimé l'espace de début (en fait tous les espaces) de l'avant de l'adresse IP.

Les œuvres suivantes pour moi:

#!/bin/bash 
#set -x 

function IPADDRESS { 
    ((v = $4 - 2)) 
    echo $1.$2.$3.$v 
} 
ADDRESS=$(ipconfig | grep Address | head -1 | cut -f2 -d: | sed 's/[ \r]//g') 
echo $ADDRESS 
IPADDRESS $ADDRESS 

délivrer en sortie:

192.168.91.7 
192.168.91.5 

En fait, ma sortie de la version la suivante:

192.168.91.1 
192.168.91.-1 

vous aurez donc besoin de regarder pour cette.

Je ne suis pas étranger à simuler la sortie pour impressionner/gérer cajole :-).

SNIPPET UTILES:

Le "set -x" en haut du script (quand non commenté) est idéal pour trouver ce genre d'erreurs. Il sort chaque ligne après toutes les substitutions, mais avant l'exécution, afin que vous puissiez voir exactement ce qui se passe.

0

J'ai essayé plusieurs combinaisons différentes. Ce qui suit a fonctionné pour moi. L'ensemble -x m'a vraiment aidé. Merci encore.

#!/bin/bash 
#set -x 
function IPADDRESS { 
    v=$4 
echo $1.$2.$3.$((v-2)) 
} 
ADDRESS=$(ipconfig | grep Address | head -1 | cut -f2 -d: | sed 's/[ \r]//g') 
IPADDRESS ${ADDRESS//\./}