실습③ 조건문, 반복문

정혜지·2022년 7월 20일
0

CS /Linux

목록 보기
7/13

1. 혈액형 구분 프로그램 💥

  • abo.sh 셸 스크립트 작성
  • 입력값 $blood
  • 혈액형 입력 A, B, O, AB (대소문자 구별 없이)
  • 혈액형 이외의 값은 다시 입력할 수 있도록 지정
  • 해당 혈액형이 맞다면 -> "XXX형을 선택하셨습니다." 문장 출력



-> vi abo.sh

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            //정상종료

-> sh abo.sh



처음 실습을 시작했을 때는 단순하게 접근했다.

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문으로 문제를 해결할 수 없는지 한번 더 체크를 해봐야할 듯 싶다.






2. 비밀번호 일치 여부 판정 프로그램 💥

  • 키보드로 비밀번호를 입력 받는다
  • passwd 변수에 저장한다
  • while 조건에서 비밀번호가 linux2022일때 반복문이 종료가 된다
  • 일치하는 비밀번호를 입력한 경우 해당 비밀번호와 함께 "확인되었습니다" 라는 문구를 출력한다
  • 만약에 비밀번호가 linux2022로 일치하지 않는다면 "다시 입력해주세요"라는 문구를 출력한다

-> vi passwd.sh

#! /bin/sh
echo " 비밀번호 일치 여부 판정 프로그램 "
   while [ true ]
   do
     read pwd
     if [ $pwd == "linux2022"]
     then
         echo "확인되었습니다."
         break;;
     else
         echo "다시 입력해주세요"
     fi
   done
exit 0

-> sh passwd.sh








실습 후기

실습1 진행하며 한시간 넘도록 고민을하고 절망하기를 반복해서 그런지
실습2는 비교적 빠르게 문제를 해결할 수 있었다💫


실습을 하며 가장 어려웠던 부분은
false일 경우 다시 입력을 할 수 있게 만들어야하는 것이었다.

처음에는 false일 경우 출력되는 위치에 read blood를 입력하였는데
이러한 경우는 다시 입력한 값에 대한 조건을 진행하지 못하기 때문에 break로 조건문을 종료하고

반복문(while)을 이용하여 처음으로 돌아가는 방식으로 수정하였다.


자바스크립트의 조건문, 반복문과 비슷하면서도 달라서 헷갈리기도 하였지만 실습을 반복하며 리눅스의 조건문, 반복문에 대한 이해도가 높아졌다고 생각한다.

vi 에디터는 에러의 원인을 알려주지 않아 원인을 파악하는데 굉장히 애를 먹었다.
[true]를 적어서 오류가 발생했는데 발견하기까지 굉장히 오래걸렸다💫



profile
오히려 좋아

0개의 댓글