Bash (Ubuntu) - while 루프의 문자열?

Bash (Ubuntu) - while 루프의 문자열?

사용자가 "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스크립팅: 비교 작업

관련 정보