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