#!/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