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
- 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
- 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
- Entonces debería mostrarse
echo "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:
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).El
gentent passwd "$username"
comando se puede utilizar para obtener lapasswd
entrada del usuario$username
. El comando fallará con un estado de salida distinto de cero si el usuario no existe. Esto significa que puede utilizarif ! getent passwd "$username" >/dev/null; then ...; fi
para reaccionar ante un usuario no existente$username
.El quinto campo de la
passwd
entrada 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 degetent passwd "$username"
usarcut -d: -f 5
para llegar al quinto campo y luego eliminarlo de la primera coma conname=${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 nombreSystem &
del usuariooperator
seaSystem operator
). No estoy seguro de que Linux haga esto en general, pero se podría hacer conname=${name/&/$username}
.La
who
utilidad genera una lista de usuarios que están conectados actualmente. Para compararlo$username
, usegrep -e "^$username\>"
. Coincide\>
con el final de una palabra, por lo que, por ejemplo,antony
no coincide al buscar oanton
.grep -q
es útil en unaif
declaración.
Esto sigue la estructura del código:
- Verifique y maneje argumentos no válidos (faltantes: leer; demasiados: salir o simplemente usar primero). Una
if
declaración. - Verifique y maneje el nombre de usuario no válido. Una
if
declaración. - Obtenga el nombre completo del usuario. Asignación(es) de variables con sustitución de comandos.
- Compruebe si el usuario ha iniciado sesión (y sale). Una
if
declaración, posiblemente con unaelse
rama.
No veo un bucle en este script, por lo que habrá una serie de if
declaraciones y asignaciones de variables.