%20-%20while%20%EB%A3%A8%ED%94%84%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%3F.png)
사용자가 "next"라는 단어를 입력할 때까지 계속되지 않는 bash에서 while 루프를 만들려고 합니다. 하지만 조건을 만족시키기 위해 문자열을 사용하는 방법을 알아낼 수 없는 것 같습니다.
#Beginning of code
echo -e "Please type next to continue."
read word
while [ "$word" -ne "next" ]
do
read word
done
#the rest of the code
답변1
!=
대신 사용-ne
echo -e "Please type next to continue."
read word
while [ "$word" != "next" ]
do
read word
done
비교 연산자를 확인하세요. http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-11.html
답변2
다른 사람들이 말했듯이 -ne
문자열을 비교하기 위해 정수 비교를 사용해서는 안 됩니다. 대신 괄호 =/!=
안에 사용하십시오 . 그럼에도 불구하고 이조차도 깨지기 쉽습니다. 문자열이 정확히 일치해야 하며,test
[
]
''
하다동일한 ''
. case
이 경우 일반적으로 s를 처리하는 것이 더 좋습니다.
set --
while read word
case $?$#$word in
($?$#[Nn][Ee][Xx][Tt]) ! :;;
([!0]*|05*) ! break ;;esac
do set '' "$@"
done
기본값이 제공됩니다$IFS
(shell을 수행할 계획이라면 고려해 볼 가치가 있습니다 read
), 이는 모든 상한/하한 값에 대해 작동해야 합니다.next
(필요하다면)그리고 루프가 끝없이 도망가는 것을 방지합니다.
답변3
내 생각엔 당신이 원하는 것:
echo 'Please type "next" to continue.'
while read word && [ "$word" != next ]; do
: something in the loop if needed
done
read
표준 입력(여기서는 확인된 종료 상태를 통해 ) 에서 파일 끝을 확인하는 것도 좋은 생각입니다 .
답변4
잘못된 비교 연산자를 사용했습니다. 다음과 같이 문자열에는 "!="를, 정수에는 "-ne"를 사용해야 합니다.
#Beginning of code
echo -e "Please type next to continue."
read word
while [ "$word" != "next" ]
do
read word
done
#the rest of the code
이 페이지를 확인하세요:고급 bash
스크립팅: 비교 작업