#!/bin/bash
while :
do
echo "Please enter your tittle:"
read TITTLE
echo "Please enter your surname:"
read SURNAME
echo "Please enter your ID No."
read ID
if [ "$TITTLE" = "" ] || [ "${TITTLE//[!0-9]}" != "" ];
then
echo "Enter your valid tittle without special characters."
echo "Please try again."
continue
fi
if [ "$SURNAME" = "" ] || [ "${SURNAME//[!0-9]}" != "" ];
then
echo "Enter your valid surname without special characters."
echo "Please try again."
continue
fi
if [ "$ID" = "" ] || [ "${ID//[0-9]}" != "" ];
then
echo "Enter your valid ID No. without special characters."
echo "Please try again"
else
echo "Thank you" $TITTLE $SURNAME
break
fi
done
Respuesta1
Supuesto: $SURNAME
es el nombre de usuario
Para escribir el contenido de $TITTLE
y $SURNAME
en $ID
un archivo con el nombre del contenido de $SURNAME
, puede modificar su código de la siguiente manera:
...
else
echo "Thank you $TITTLE $SURNAME, your information will be stored in \"$SURNAME.txt\""
echo -e "$TITTLE\n$SURNAME\n$ID" > "$SURNAME.txt"
break
...
por lo que -e permite que echo se reconozca \n
como 'nueva línea'.
Respuesta2
Como escribí en mi respuesta a la pregunta relacionada "Script que valida 3 entradas", la salida del script puede ser redirigida por
$ ./script.sh >"$USER.txt"
donde $USER
será reemplazado por su nombre de usuario (esta variable, al igual que $LOGNAME
, generalmente la configura el shell o el sistema como su nombre de usuario).
Si desea utilizar el apellido leído por el script, cambie la línea
echo "Thank you" $TITTLE $SURNAME
en
echo "Thank you $TITTLE $SURNAME" >"$SURNAME.txt"
Esto redirigiría el resultado de echo
a un archivo cuyo nombre viene dado por lo que el usuario ingresó como apellido, agregado .txt
al final del nombre del archivo (esto es opcional, obviamente). Tenga en cuenta que no se comprueba si esto sobrescribe un archivo existente.
Para enviar esto también al terminal, duplique los datos con tee
:
echo "Thank you $TITTLE $SURNAME" | tee "$SURNAME.txt"
Para enviar los tres bits de datos al archivo, use, por ejemplo,
{
printf 'ID = %s\n' "$ID"
printf 'surname = %s\n' "$SURNAME"
printf 'title = %s\s' "$TITTLE"
} >"$SURNAME.txt"
Agrupar un conjunto de comandos dentro de llaves como este le permite redirigir toda la salida del grupo en una sola redirección.
Ver "¿Por qué printf es mejor que echo?" por eso tiendo a usar printf
en lugar de echo
cuando imprimo cadenas variables.