Bash 스크립트에서 AND 연산자를 작동시킬 수 없습니다

Bash 스크립트에서 AND 연산자를 작동시킬 수 없습니다

입력이 "on 1"이면 하나의 작업을 수행하고 입력이 "on 2"이면 다른 작업을 수행하는 매우 간단한 bash 스크립트를 만들려고 합니다. 사람들이 bash 스크립트에서 and 연산자를 어떻게 작동시키는지 알아보기 위해 인터넷 검색을 했고 다양한 방법을 찾았지만 괄호를 괄호 ()[] 로 바꾸는 것을 발견하기 전까지는 그 중 아무 것도 작동하지 않는 것 같았습니다.

#!/bin/sh
#

if (($1=="on" && $2=="1")); then
    echo $1 $2
else
    echo failure
fi

이렇게 하면 내 스크립트가 두 번째 인수를 허용하지만 첫 번째 인수는 허용하지 않습니다. 따라서 "off 1"을 쓰면 $1이 if처럼 "on"이 아니더라도 스크립트가 실행됩니다. 그러나 "on 2"를 쓰면 코드가 else 문으로 이동합니다.

두 번째 매개변수 대신 두 매개변수를 올바르게 읽도록 하려면 어떻게 해야 합니까?

답변1

이중 괄호는 숫자 연산에 사용됩니다. 대괄호는 []부울 컨텍스트처럼 작동합니다. 대괄호는 이식성이 없으며 dash다른 매우 작은 쉘에서는 실패합니다. 실제로 [논리적 작업을 수행하는 쉘 내장/POSIX 유틸리티이므로 주위에 공백이 필요합니다.이 링크궁금하신 경우 이 주제에 대한 자세한 내용이 있습니다.

이렇게 작성하면 다음과 같이 보일 것입니다.

#!/bin/sh

# check we got the expected number of arguments
if [ "$#" -ne 2 ]; then
  echo USAGE ...
  exit
fi

if [ "x$1" = "xon" ] && [ "$2" -eq 1 ]; then
  echo "$1 $2"
else
  echo failure
fi

"x" 연결은 빈 문자열로 인해 프로그램이 중단되는 것을 방지하는 좋은 방법입니다.

답변2

댓글에서 언급한 대로 시도해 볼 수 있지만 공백에 주의하세요.

#!/bin/bash


if [[ "$1" == "on" && $2 -eq 1 ]]; then
    echo $1 $2
else
    echo failure
fi

관련 정보