vi 에디터로 abo 쉘 스크립트 작성
#! /bin/sh //주석
echo " 혈액형 구분 프로그램 "
while [ ture ]
do
read blood
case $blood in
A | a)
echo "A형 입니다."
break;;
B | b)
echo "B형 입니다."
break;;
O | o)
echo "O형 입니다."
break;;
AB | ab)
echo "AB형 입니다."
break;;
)
echo "잘 못 입력하셨습니다."
esac
done
exit 0 //정상종료
처음 실습을 시작했을 때는 단순하게 접근했다.
read blood
while [ true ]
do
if [ $blood == "A" | "B" | "O" | "AB" ]
then
echo " $blood형 입니다."
else
echo "다시 입력하세요"
break;;
fi
done
exit 0
blood 변수에 입력값을 할당하고,
if 조건문에 blood의 입력값이 A|b|O|AB와 일치하는 값이 하나라도 있으면
(소문자 조건은 일단 무시하고 진행)
true로 "입력값+형 입니다." 문장 출력.
false라면 "다시 입력하세요" 문장을 출력하고 read blood로 되돌아감 (while 반복문)
: 위 코드를 실행한 결과
if 조건식을 적은 코드에 syntax error ']'가 발생했다.
syntax error를 해결할 수 없어 if문 -> case로 변경
case $blood in
A|a)
echo "A형 입니다."
break;;
B|b)
echo "B형 입니다."
break;;
O|o)
echo "O형 입니다."
break;;
AB|ab)
echo "AB형 입니다."
break;;
esac
break를 사용할때 세미콜론을 쓰지않아 에러가 발생했고 다른사람의 도움을 받아 세미콜론을 추가하였다.
세미콜론을 추가하고 에러는 발생하지 않았지만 while문이 반복해서 출력되는 무한루프 현상이 발생하여
read blood의 위치를 while문의 do 안으로 변경하였다
while [ true ]
do
read blood
if [ $blood == "A" | "B" | "O" | "AB" ]
then
echo " $blood형 입니다."
else
echo "다시 입력하세요"
break
fi
done
exit 0
정상적으로 출력이 완료되었다.
if문으로 문제를 해결할 수 없는지 한번 더 체크를 해봐야할 듯 싶다.
#! /bin/sh
echo " 비밀번호 일치 여부 판정 프로그램 "
while [ true ]
do
read pwd
if [ $pwd == "linux2022"]
then
echo "확인되었습니다."
break;;
else
echo "다시 입력해주세요"
fi
done
exit 0
실습1 진행하며 한시간 넘도록 고민을하고 절망하기를 반복해서 그런지
실습2는 비교적 빠르게 문제를 해결할 수 있었다💫
실습을 하며 가장 어려웠던 부분은
false일 경우 다시 입력을 할 수 있게 만들어야하는 것이었다.
처음에는 false일 경우 출력되는 위치에 read blood를 입력하였는데
이러한 경우는 다시 입력한 값에 대한 조건을 진행하지 못하기 때문에 break로 조건문을 종료하고
반복문(while)을 이용하여 처음으로 돌아가는 방식으로 수정하였다.
vi 에디터는 에러의 원인을 알려주지 않아 원인을 파악하는데 굉장히 애를 먹었다.
[true]를 적어서 오류가 발생했는데 발견하기까지 굉장히 오래걸렸다💫