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