私のスクリプトはデータをより読みやすい形式に変換します。ところで質問があります。パラメータを入力せずにスクリプトのみを入力した場合は、私が実行した「ファイル名を入力してください」を返したいと思います。ただし、何らかの理由でテストすると表示されません。パラメータが0より大きい場合は実行し、それ以外の場合はメッセージをエコーするようにシステムに指示します。
*コードの交換に関するアドバイスを求めるものではありません。特別な事由により変更はできませんので、本作品へのご提案はお控えください。
for myvar
do
if [ $# -gt 0 ]
then
if [ -e "$myvar" ]
then :
else
echo "$myvar cannot be found."
exit
fi
echo "This is the filname:" $myvar
cut -f1 -d, $myvar > social_security
cut -f2 -d, $myvar > last_name
cut -f3 -d, $myvar > first_name
sed 's/^ *//' last_name > last_name_draft
sed 's/^ *//' first_name > first_name_final
sed 's/-//' social_security > social_security_draft
sed 's/-//' social_security_draft > social_security_final
sed 's/$/:/' last_name_draft > last_name_final
paste -d\ first_name_final last_name_final social_security_final > final_draft
sed '1d' final_draft > final
cat final
echo -en '\n'
else
echo "Please enter a filename."
fi
done
答え1
スクリプトの最初の行を考えてみましょうfor myvar
。for
このループはパラメータなしで何回実行されますか?
答え2
はい、続行する前に引数があることを確認する必要があります。
if [ $# -gt 0 ]
then
for myvar
do
if ! [ -e "$myvar" ]
echo "$myvar cannot be found."
exit
fi
echo "This is the filname:" $myvar
cut -f1 -d, $myvar > social_security
cut -f2 -d, $myvar > last_name
cut -f3 -d, $myvar > first_name
sed 's/^ *//' last_name > last_name_draft
sed 's/^ *//' first_name > first_name_final
sed 's/-//' social_security > social_security_draft
sed 's/-//' social_security_draft > social_security_final
sed 's/$/:/' last_name_draft > last_name_final
paste -d\ first_name_final last_name_final social_security_final > final_draft
sed '1d' final_draft > final
cat final
echo -en '\n'
done
else
echo "Please enter a filename."
fi