#!/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
решение1
Предположение: $SURNAME
имя пользователя
Чтобы записать содержимое в файл $TITTLE
, названный по содержимому , вы можете изменить свой код следующим образом:$SURNAME
$ID
$SURNAME
...
else
echo "Thank you $TITTLE $SURNAME, your information will be stored in \"$SURNAME.txt\""
echo -e "$TITTLE\n$SURNAME\n$ID" > "$SURNAME.txt"
break
...
при этом -e позволяет echo распознавать его \n
как «переход на новую строку».
решение2
Как я написал в своем ответе на связанный с этим вопрос:Скрипт, проверяющий 3 входа", вывод скрипта можно перенаправить
$ ./script.sh >"$USER.txt"
где $USER
будет заменено вашим именем пользователя (эта переменная, как и $LOGNAME
, обычно устанавливается на ваше имя пользователя оболочкой или системой).
Если вы хотите использовать фамилию, прочитанную сценарием, то измените строку
echo "Thank you" $TITTLE $SURNAME
в
echo "Thank you $TITTLE $SURNAME" >"$SURNAME.txt"
Это перенаправит результат echo
в файл, имя которого будет получено из того, что пользователь ввел для фамилии, с .txt
добавлением в конец имени файла (это необязательно, очевидно). Обратите внимание, что не выполняется проверка того, перезаписывает ли это существующий файл.
Чтобы вывести это на терминал, продублируйте данные с помощью tee
:
echo "Thank you $TITTLE $SURNAME" | tee "$SURNAME.txt"
Чтобы вывести все три бита данных в файл, используйте, например,
{
printf 'ID = %s\n' "$ID"
printf 'surname = %s\n' "$SURNAME"
printf 'title = %s\s' "$TITTLE"
} >"$SURNAME.txt"
Группировка набора команд внутри фигурных скобок, как здесь, позволяет перенаправить все выходные данные из группы одним перенаправлением.
Видеть "Почему printf лучше, чем echo?" почему я предпочитаю использовать , printf
а не echo
при печати переменных строк.