script configurar tarjeta de red

Hola buen@s,

Visto que soy un negado par ala programación acudo a vosotros, llevo una semana para realizar el primer paso del script, lo único que quiero es que pida " " introducir la ip " y si se introduce una letra ó un formato no esperado devuelva el mensaje " de direccion incorrecta "

Os pongo el código:

Citar

#!/bin/bash
clear

echo "Introduzca IP"
read IP

if [ $IP == 0 ] ; then

echo "El formato de la direccion ip es incorrecto $IP "

fi

Seguro que el problema está en el if pero no veo como solucionarlo.

Un saludo

Intentalo encomillando.De todos modos ahí dice si la variable IP es igual a cero.

if [ "$IP" == "0 "] ; then

Y creo que lo que buscas es algo parecido a :

$ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

Edito: fijate acá
Edito2: Creo que ésto tiene lo que vos buscas ,adecuándolo a tu necesidad claro.

En sh no se compara numero con = ni ==

if [ $IP -eq 0 ] ; then
Pato Silva escribió:

En sh no se compara numero con = ni ==

if [ $IP -eq 0 ] ; then

Tenes toda la razón, el '=' ; '= =', es para comparar cadenas shamed

Pato, cuanta razon si asi funciona, pero si pongo una direccióm correcta me da un error muy raro:
[: 12: Illegal number:192.168.1.1

Ahora solo me queda averiguar, que tengo que hacer, para en el caso que pongan una letra , un numero de tres cifras ( Ej: 999 000 ) les salga el mensaje y automaticamente vuelva a la linea en la que estaban, me explico; si la dirección IP es incorrecta que vuelva a la linea " Introduzca su dirección IP "

Para realizar lo anterior seria con un

echo "Introducir IP"
read IP

if [ $IP -eq 0 ] ; then

echo " El formato de la dirección ip no es correcto "

else

echo " Introducir IP"
read IP

fi

Un saludo

Chambe escribió:

Pato, cuanta razon si asi funciona, pero si pongo una direccióm correcta me da un error muy raro:
[: 12: Illegal number:192.168.1.1

Ahora solo me queda averiguar, que tengo que hacer, para en el caso que pongan una letra , un numero de tres cifras ( Ej: 999 000 ) les salga el mensaje y automaticamente vuelva a la linea en la que estaban, me explico; si la dirección IP es incorrecta que vuelva a la linea " Introduzca su dirección IP "

Para realizar lo anterior seria con un

echo "Introducir IP"
read IP

if [ $IP -eq 0 ] ; then

echo " El formato de la dirección ip no es correcto "

else

echo " Introducir IP"
read IP

fi

Un saludo

solo unas cosas. Para que vuelva a preguntar tenes que usar un bucle como wile:

while [  true ]; do
if [ IP es correcta  ]; then
break;
else
echo -e "ip incorrecta"
fi
done

otra cosa no necesitas el echo antes del read, puede ser así:

echo "Introducir IP"
read IP

es lo mismo que:

read -p "Introducir IP " IP

saludos
edito:
ahora que probe, el true va solo sin el test ([]):
prueba este ejemplo:

#!/bin/bash
while true ; do
        read -p "Introducir IP " IP
        if [ $IP == 34.32 ]; then
                echo correcto...
                break;
        else
                echo -e "ip incorrecta"
        fi
done

Para filtrar de modo mas exacto podrías hacer

if [ -z echo $IP | grep -E '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ] ; then

Claro que ahí pasaría una dirección del tipo 895.578.985.548 pero en fin.. es un poco mas fino

Algo estoy realizando mal porque me da el siguiente error:

Introducir direccion IP 192.168.1.1
[: 14: 192.168.1.1: unexpected operator
-e El formato no es el correcto

PD. COmo saco el caracter ^

Chambe escribió:

PD. COmo saco el caracter ^

Depende del modelo de teclado que tengas pero :

AltGr  + ^
Pato Silva escribió:

Para filtrar de modo mas exacto podrías hacer

if [ -z echo $IP | grep -E '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ] ; then

Claro que ahí pasaría una dirección del tipo 895.578.985.548 pero en fin.. es un poco mas fino

Creo que lo que buscas es algo así:

grep '^\(2[0-5][0-9]\.\|1\{0,1\}[0-9]\{1,2\}\.\)\{3\}\(2[0-5][0-9]\.\|1\{0,1\}[0-9]\{1,2\}\)$'

Indistinguible de un jeroglífico, como toda buena regex meparto meparto

Algo no funciona entra en un bucle infinito:

Citar

Introducir direccion IP read: 14: arg count
[: 14: missing ]
-e El formato no es el correcto
Introducir direccion IP read: 14: arg count
[: 14: missing ]
-e El formato no es el correcto
Introducir direccion IP read: 14: arg count
[: 14: missing ]
-e El formato no es el correcto
Introducir direccion IP read: 14: arg count
[: 14: missing ]

El codigo

Citar

#!/bin/bash
clear

while true ; do

read -p " Introducir direccion IP "
if [ -z echo $IP | grep -E '^\(2[0-5][0-5]\.\|1\{0,1}[0-9]\{1,2\}\.\)\{$
break;

else
echo -e " El formato no es el correcto"

fi
done

Un saludo y gracias