在我的脚本中,我将数据转换为更易读的格式。但我有一个问题。如果没有输入参数,只输入脚本,我希望它返回我已经完成的“请输入文件名”。但由于某种原因,测试时不会显示。我通过告诉系统如果参数大于 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