쉘스크립트 while 문 관련해서
안녕하세요. 쉘스크립트를 이용해 아래와 같은 루프를 작성했는데
------------------------------------------------------
#!/bin/sh
echo "선택하세요"
echo "1.사과 2.바나나 3.오렌지 4.딸기"
echo -n "좋아하는 과일은? : "
read fruits
while [[ $fruits < 1 || $fruits > 4 || $fruits -ge 10 ]]
do
echo "잘못 선택했습니다. 1~4 사이의 숫자만 입력하세요"
echo -n "좋아하는 과일은? : "
read fruits
done
-------------------------------------------------------
대략 위의 형태인데, while 조건에 의해 입력된 값이 1~4 외에 음수( -1 -2 -234728 등) 와 10 이상의 모든 숫자 입력시 do~done 사이의 코드가 실행이 됩니다만
입력값이 2++ 1-- 와 같이 숫자와 특수문자 그리고 2lowie 와 같이 숫자와 문자가 붙을 경우 에러가 발생합니다.
wrjlwejk22 와 같이 문자다음에 숫자가 나오는 경우에는 문제가 발생하지 않습니다.
2lowie 을 입력했을 때 에러코드 --> [[: 2lowie: value too great for base (error token is "2lowie")
2++ 를 입력했을 때 에러코드 --> [[: 2++: syntax error: operand expected (error token is "+")
1-- 를 입력했을 때 에러코드 --> [[: 1--: syntax error: operand expected (error token is "-")
while 조건문에 무엇을 추가해야 위의 에러가 나오지 않을까요? 검색 등 온갖 방법을 참고해보았으나 해결이 안되어 도움을 청해봅니다. ^^
감사합니다.
음 ..
문자열일때에는 대소비교가 안 되죠..
그냥 case 쓰시는게..?
bash 에서는 select 를 쓸 수도 있습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
ymir 님 답변에 깊은 감사드립니다.
우선 ymir 님 답변에 깊은 감사드리며 제가 생각했던 코드는
------------------------------------------------------
#!/bin/sh
echo "선택하세요"
echo "1.사과 2.바나나 3.오렌지 4.딸기"
echo -n "좋아하는 과일은? : "
read fruits
while [[ $fruits < 1 || $fruits > 4 || $fruits -ge 10 ]]
do
echo "잘못 선택했습니다. 1~4 사이의 숫자만 입력하세요"
echo -n "좋아하는 과일은? : "
read fruits
done
case $fruits in
1) echo "Apple"
;;
2) echo "Banana"
;;
3) echo "Orange"
;;
4) echo "Strawberry"
;;
esac
-------------------------------------------------------
이런 식으로 구현하려고 했었는데 제가 잘못 생각했었나 봅니다. ^^
ymir 님의 방법으로 구현하니 1++ 2-- 입력시 별도의 오류 없이 잘 처리 됩니다.
덕분에 오늘도 하나 더 배우고 갑니다. 소스코드 전체적으로 수정해야겠네요 ㅎㅎ
가르침에 감사 드립니다. 날씨가 추운데 감기 조심하시기 바랍니다.
음 ..
정확한 값이 입력되었는지 확인한 후에 나중에 그 값을 사용하는것도..
로직상 그렇게 구성하는 경우도 있으니 잘못 생각했다고 보기엔 좀 이르죠.
패턴매칭으로 입력된 값이 숫자인지 아닌지 확인해서, 숫자인 경우에만 비교를 하면 되겠네요.
아래 링크 참고하세요.
http://stackoverflow.com/questions/806906/how-do-i-test-if-a-variable-is-a-number-in-bash
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
음 ..
추가로 위에 썼던 걸 다시 재활용 해서..
정규식 대신 써 먹을 수도 있습니다.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
댓글 달기