如何将三个输入保存到与用户同名的文件中?

如何将三个输入保存到与用户同名的文件中?
#!/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

相关内容