Bash 스크립트에서 매개변수에 부울 값("true" 또는 "false")이 있는지 확인하고 싶습니다.
나는 이것을 두 가지 스크립트, 두 가지 다른 방법으로 시도하고 있는데 둘 다 실패합니다.
나는 많은 Stack Exchange 프롬프트를 확인했고 그것이 내가 해야 할 일을 한다고 생각하지만 그렇지 않습니다.
if [ "$2" != "true" ] -a [ "$2" != "false" ]; then
echo "Indiquez si Geoserver est en installation initiale (false) ou update (true)" >&2;
exit 1;
fi
메시지와 함께 실패Geoserver.sh: 12: [: true: unexpected operator
if [[ "$3" != "true" && "$3" != "false" ]]; then
echo "Indiquez si Kafka est en installation initiale (false) ou update (true)" >&2;
exit 1;
fi
실패한Kafka.sh: 18: [[: not found
답변1
표준 접근 방식은
[ "$3" != "true" ] && [ "$3" != "false" ]
즉, 두 개의 [
명령이 실행되고, 각 명령은 테스트를 수행하며 &&
쉘의 연산자와 연결됩니다.
[[...]]
기능이 풍부한 많은 쉘에서 지원되는 ksh의 특수 비표준 쉘 구문이며 일반적으로 &&
괄호를 지원합니다. 으로 구축되지 않는 bash
한 bash
사용할 수 있어야 --disable-cond-command
하지만 오류 메시지의 문구에 따르면 쉘을 사용하는 것이 좋습니다 dash
. bash
를 사용하여 빌드할 때 오류 --disable-cond-command
는 Geoserver.sh: 12: [: too many arguments
및 입니다 Kafka.sh: 18: [[: command not found
.
-a
[
이전 버전과의 호환성을 위해 로 지원되지만 [ "$2" != "true" -a "$2" != "false" ]
더 이상 사용되지 않으며 설계상 손상되었습니다( -o
상대 부분과 마찬가지로).또는)을 사용하면 안 됩니다.
이는 복잡합니다.
답변2
bash
두 오류 모두 전혀 사용하지 않고 대신 성능이 떨어지는 쉘을 사용하고 있음을 나타냅니다 dash
.
또한 첫 번째 예에서는 "and" 절을 잘못 구현했습니다.
나는 이것이 당신이 원하는 것이고 정말로 사용하고 싶다면 작동해야 한다고 생각합니다 bash
.
if [ "$2" != "true" -a "$2" != "false" ]; then
선호되는 방법은 다음과 같은 이식성이 더 높은 옵션인 경향이 있습니다.
if [ "$2" != "true" ] && [ "$2" != "false" ]; then
두 번째 예의 오류는 [[ ]]
해당 표기법을 지원하는 셸을 사용하고 있지 않음을 나타냅니다. [ ] && [ ]
위 스타일 표기법으로 변경하면 더 많은 성공을 거둘 수 있습니다.