Script para copia de seguridad en un servidor

Buenas a todos, tengo un pequeño problemilla, que necesito que me echéis un cable.

Este es el script
#########################################
#!/bin/bash
# Script para borrar una cinta de backup y etiquetarla
#########################################
#Con esto borramos la cinta

mt -f /dev/nst0 erase

echo La cinta se ha borrado correctamente.

#mostramos el argumento a ver si lo ha cogido bien y está OK
echo El argumento introducido es: $1
#el argumento entra correctamente en la variable

#########################################
#Lo bueno es que hay que comparar la variable $1 que
#contiene el parámentro introducido por teclado con dos
#cadenas, lo que se introduce como parámetro, siempre será
#backup_increm[0-9] (de 0 a 9, backup_increm0,1,....) o
#backup_full[0-9], por lo que la única parte de la cadena que
#coincide es: backup_increm ó backup_full.
#########################################

if [ $1 = backup_increm ]; then

#Etiquetamos como backup_increm0
amlabel -f incremental $1
echo Se etiqueta como incremental y empieza la copia

else
if [ $1 = backup_full ]; then

amlabel -f full $1
echo Se etiqueta como full y empieza la copia
else

echo El parametro introducido no es valido.
fi

fi

########################################
Se me había ocurrido que cogiera sólo esta parte para la condición de los if:
backup_incr
backup_full
si sólo se comparan estas partes, tienen el mismo número de caracteres, ya que probando con comodines * ó ?, no los reconoce y siempre me salta al final.

La ejecución sería:

./cop_seg backup_increm3

La cinta se ha borrado correctamente

El argumento introducido es: backup_increm3

El parametro introducido no es valido



La pregunta es:

¿Cómo hago para que me compare toda la cadena sin tener en cuenta el número del final?

Ideas???

:( :(

Gracas.

Zokko
Seguro que hay otra forma mejor de hacerlo, pero:

aux=`echo $1 | wc -c`
aux=`expr $aux - 1`
if [[ "`echo $1 | head -c $aux`" = "backup_full" ]]
then
echo "aquí lo que sea2
fi

yo muchas veces lo he hecho así y funciona.
Supongo que los gurús lo harán con1 sola instrucción, a ver si nos la cuentan ;)
Como veo que usas bash:

if [[ $1 =~ backup_full[0-9]*$ ]] ; then
    echo si
else
    echo no
fi


Simple y sin complicaciones. Si no tienes bash, usa:

if expr "$1" : 'backup_full[0-9]*$' > /dev/null ; then
    echo si
else
    echo no
fi


- ferdy
A estas horas no puedo pensar, pero te puedo dar un consejo. Para depurar scripts de sh o de bash usa ls opción -x. Bueno, en al manual hay más ayuda para depurar, pero eso es un buen comienzo.

saludos
Muchas gracias a los tres, lo de Ferdy ha sido la clave y he aprendido algo más.

Bueno ya funciona correctamente, y le añadí para que me avisara al correo. Prbé esa parte y parece que funciona.
Hoy lo estoy probando entero a ver si no da ningún fallo y lo hace bien.

Gracias nuevamente.

Un saludo.
Ferdy escribió:Como veo que usas bash:


Simple y sin complicaciones. Si no tienes bash, usa:
Esto......
Ferdy, podrias hacer un CLONE de tu cerebro (la parte de Linux esencialmente) y pasarmela ??

Gracias.....
XD XD XD
6 respuestas