#!/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
,通常由 shell 或系统设置为您的用户名)。
如果您想使用脚本读取的姓氏,则更改该行
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