viernes, 6 de febrero de 2015

Uso If/Else Shell linux

Para que una secuencia de comando para ser muy útil, tendrá que ser capaz de probar las condiciones de variables. La mayoría de los lenguajes de programación y script tienen algún tipo de si / expresión de los demás y también lo hace el shell Bourne. A diferencia de otros idiomas, los espacios son muy importantes cuando se utiliza un caso de declaración.Vamos a hacer un simple script que le pedirá un usuario una contraseña antes de permitir que continuara. Esto obviamente no es cómo se llevaría a cabo dicha seguridad en un sistema real, pero va a hacer un buen ejemplo del uso de if y else declaraciones.
 
#!/bin/sh
# This is some secure program that uses security.

VALID_PASSWORD="secret" #this is our password.

echo "Please enter the password:"
read PASSWORD

if [ "$PASSWORD" == "$VALID_PASSWORD" ]; then
 echo "You have access!"
else
 echo "ACCESS DENIED!"
fi
Recuerde que el espacio es muy importante en la sentencia if. Observe que la terminación de la sentencia if es fi .Usted tendrá que utilizar el fi declaración de despedir a un si o no usar usar una cosa así. También puede reemplazar los "==" con "! =" Para probar si las variables no son iguales. Hay otras señales que usted puede poner en su lugar de los "==" para otros tipos de pruebas. La siguiente tabla muestra las diferentes expresiones permitidas. 
Comparaciones:
-eqigual a
-neno es igual a
-ltmenos que
-lemenos de o igual a
-gtmás que
-gemayor que o igual a

Operaciones del archivo:
-sfichero existe y no está vacío
-ffichero existe y no es un directorio
-dEl directorio
-xarchivo es ejecutable
-warchivo es escribible
-rarchivo es legible

Vamos a tratar de usar un par de ellos en un script. La siguiente secuencia de comandos le pedirá un nombre de usuario, si no hay un archivo que existe con el nombre "username_DAT", el guión le pedirá al usuario para su edad, será a continuación, asegúrese de que tengan edad suficiente para utilizar este programa y entonces se escribirá su edad en un archivo con el nombre "username_DAT". Si el archivo ya existe, se acaba de mostrar la edad del usuario. 
#!/bin/sh

# Prompt for a user name...
echo "Please enter your name:"
read USERNAME

# Check for the file.
if [ -s ${USERNAME}_DAT ]; then
        # Read the age from the file.
        AGE=`cat ${USERNAME}_DAT`
        echo "You are $AGE years old!"
else
        # Ask the user for his/her age
        echo "How old are you?"
        read AGE

 if [ "$AGE" -le 2 ]; then
  echo "You are too young!"
 else
  if [ "$AGE" -ge 100 ]; then
   echo "You are too old!"
  else
          # Write the age to a new file.
          echo $AGE > ${USERNAME}_DAT
         fi
        fi
fi
Ejecutar este programa un par de veces. Primero ejecutarlo y póngale el nombre de usuario "john". Cuando se pide una edad, entrar en la era "1". Note que va a decir que usted es demasiado usted y luego salir. Ahora ejecute el programa de nuevo con el nombre "Juan" y la edad 200. Esta vez el guión le dirá que usted es demasiado viejo y salir. Ahora ejecuta el script de nuevo con el nombre de "Juan", introduzca la edad de 30 años El script finaliza normalmente en esta ocasión, el programa crea un archivo llamado "john_DAT", que contiene el texto "30". Finalmente ejecutar el programa una vez más y darle el nombre "Juan". Esta vez no le pedirá que introduzca una edad, sino que leerá la edad a partir de un archivo y decir "Estás 30 años!".
Introdujimos otra cosa nueva en este guión. En la línea 10 del archivo, vemos el código: 
 EDAD = `cat $ {username} _DAT`
Así es como se ejecuta un comando y poner el texto de salida del comando en una variable. El comando unix gato lee el archivo con nombre $ {username} _DAT y la envía a la consola. En lugar de poner a la consola en nuestro script, envolvemos el comando con el carácter ` , esto pone el texto en nuestra variable EDAD. 
Puede probar múltiples expresiones a la vez utilizando el || operador (o) o el && (y) del operador. Esto le puede ahorrar de escribir código adicional para anidar sentencias if. El código anterior ha anidado una sentencia if donde comprueba si la edad es mayor que o igual a 100. Esto podría ser cambiado, así mediante el uso de elif (más si). La estructura de elif es la misma que la estructura de si , vamos a utilizar en un ejemplo a continuación. En este ejemplo, vamos a comprobar para ciertos rangos de edad. Si usted es menor de 20 o mayor de 50, se encuentra fuera del rango de edad. Si tienes entre 20 y 30 usted está en sus años 20 y así sucesivamente. 
#! / Bin / sh

# Pedirá un nombre de usuario ... 
echo "Por favor, introduzca su edad:"
leer EDAD

si  [  "$ EDAD"  - lt 20  ]  ||  [  "$ EDAD"  - ge 50  ];  entonces 
 echo ". En este momento, usted está fuera del rango de edad" 
elif  [  "$ EDAD"  - ge 20  ]  &&  [  "$ EDAD "  - lt 30  ];  entonces 
 echo "Usted está en sus 20s" 
elif  [  "$ EDAD"  - ge 30  ]  &&  [  "$ EDAD"  - lt 40  ];  entonces 
 echo "Usted está en sus 30s" 
elif  [  "$ EDAD "  - ge 40  ]  &&  [  "$ EDAD"  - lt 50  ];  entonces 
 echo "Usted está en sus 40s" 
fi

No hay comentarios:

Publicar un comentario