ユーザーと同じ名前のファイルに3つの入力を保存するにはどうすればよいですか?

ユーザーと同じ名前のファイルに3つの入力を保存するにはどうすればよいですか?
#!/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"

3 ビットのデータをすべてファイルに出力するには、次のようにします。

{
    printf 'ID = %s\n' "$ID"
    printf 'surname = %s\n' "$SURNAME"
    printf 'title = %s\s' "$TITTLE"
} >"$SURNAME.txt"

このように中括弧内にコマンドグループをグループ化すると、グループ内のすべての出力を単一のリダイレクトにリダイレクトできます。

望むより」なぜprintfがechoより優れているのですか?これが変数文字列を印刷するときにprintf「代わりに」を使用する傾向がある理由です。echo

関連情報