Declaraciones If con declaraciones de código de salida

Declaraciones If con declaraciones de código de salida

Soy un principiante en Linux/Unix. Aquí está mi tarea, es demasiado largo para publicarlo todo aquí:https://i.stack.imgur.com/v2AJR.jpg

Aquí está la lógica que tengo.:

Este código verificará si el usuario ingresó un argumento o no. No sé qué poner debajo más. Nunca hablamos sobre la declaración what que aprendí de otro usuario aquí, por lo que no se espera que se use. Solo comandos básicos, esta no es una tarea súper avanzada.

if [ $# -ne 1 ]; then
        echo Please enter a single, valid user id: 
        read userid
else
        userid=$1
        **what goes here?**
fi

Para mostrar el nombre completo de un usuario (es decir, Ben Franklin), este es el código que escribí y probé:

grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'

Determine si el usuario ha iniciado sesión o no:

Si el usuario no ha iniciado sesión (devolverá el código de salida 1):who | grep $userid

  1. Luego muestre grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'Yecho is NOT currently logged on luego finalice el script con un código de 1.

Si el usuario ha iniciado sesión (devolverá el código de salida 0):who | grep $userid

  1. Luego muestre grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'Yecho is currently logged on luego finalice el script con un código de 0.

Determinar si un usuario es válido:

Si el usuario no es válido (devolverá el código de salida 1):grep $userid /etc/passwd

  1. Entonces debería mostrarseecho "The user you entered, $userid is not a valid user on this system."

Si el usuario es válido (devolverá el código de salida 0):grep $userid /etc/passwd

¿Cómo escribo este guión? ¿Cuál es la estructura completa? Estoy atascado en la estructura/la configuración.

Respuesta1

Como esto parece una tarea, sólo te daré las herramientas y algunos consejos:

  1. Si no se proporcionó ningún argumento al script, entonces $1(el primer argumento del script) estará vacío. Puedes probar esto con [[ -z $1 ]]. Si desea mostrar un error parademasiadosargumentos, pruebe el número de argumentos con [[ $# -eq 1 ]](será verdadero para un solo argumento).

  2. El gentent passwd "$username"comando se puede utilizar para obtener la passwdentrada del usuario $username. El comando fallará con un estado de salida distinto de cero si el usuario no existe. Esto significa que puede utilizar if ! getent passwd "$username" >/dev/null; then ...; fipara reaccionar ante un usuario no existente $username.

  3. El quinto campo de la passwdentrada para un usuario.generalmentecontiene el nombre completo del usuario (realmente no hay garantía de que esté en formato "nombre, apellido"). Es posible que la entrada tenga comas adicionales al final que deberá eliminar. Puede analizar el resultado de getent passwd "$username"usar cut -d: -f 5para llegar al quinto campo y luego eliminarlo de la primera coma con name=${name%%,*}.

    En algunos sistemas, el nombre completo del usuario puede contener un &carácter. En esos sistemas, este &carácter debe reemplazarse por el nombre de usuario (de modo que el nombre System &del usuario operatorsea System operator). No estoy seguro de que Linux haga esto en general, pero se podría hacer con name=${name/&/$username}.

  4. La whoutilidad genera una lista de usuarios que están conectados actualmente. Para compararlo $username, use grep -e "^$username\>". Coincide \>con el final de una palabra, por lo que, por ejemplo, antonyno coincide al buscar o anton. grep -qes útil en una ifdeclaración.

Esto sigue la estructura del código:

  1. Verifique y maneje argumentos no válidos (faltantes: leer; demasiados: salir o simplemente usar primero). Una ifdeclaración.
  2. Verifique y maneje el nombre de usuario no válido. Una ifdeclaración.
  3. Obtenga el nombre completo del usuario. Asignación(es) de variables con sustitución de comandos.
  4. Compruebe si el usuario ha iniciado sesión (y sale). Una ifdeclaración, posiblemente con una elserama.

No veo un bucle en este script, por lo que habrá una serie de ifdeclaraciones y asignaciones de variables.

información relacionada