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"

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

見る "なぜ printf は echo よりも優れているのでしょうか?変数文字列を印刷するときにprintf、 ではなくを使用する傾向がある理由については、「」を参照してください。echo

関連情報