내 스크립트에서는 데이터를 더 읽기 쉬운 형식으로 변환합니다. 그런데 질문이 있어요. 매개 변수를 입력하지 않고 스크립트만 입력한 경우 내가 수행한 "파일 이름을 입력하십시오"를 반환하고 싶습니다. 그러나 어떤 이유로 테스트할 때 표시되지 않습니다. 매개변수가 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