$1 또는 $2가 비어 있는지 테스트하려면 "-z"를 사용하십시오. - BASH

$1 또는 $2가 비어 있는지 테스트하려면 "-z"를 사용하십시오. - BASH

동일한 스크립트에서 여러 RAID 모니터링을 수행하고 있으며 변수가 null을 반환하면 스크립트에서 경고를 보내거나 빨간색으로 바뀌기를 원합니다.

나는 읽으려고 노력하고 그것을 얻었다고 생각하지만, 나의 시도는 결코 결코 실패하지 않습니다.

테스트하기 위해 grep을 실패하게 만들었고 이로 인해 실패가 발생했지만 지금까지는 실패하게 만들 수 없었고 실제로는 항상 통과했습니다.

테스트 환경은 다음과 같습니다.

var="$(sudo /usr/StorMan/arcconf GETCONFIG 1 LD 0 | grep Optimal)"
var1="$(sudo /usr/StorMan/arcconf GETCONFIG 1 LD 1 | grep fail)"

이것은 1개의 변수에 대해 작동합니다.

if [ -z "$var" ]

나는 열심히 노력했다

if [ -z "$var" ] && [ -z "$var1" ]
if [ -z "$var" && -z "$var1" ]
if [[ -z "$var" && -z "$var1" ]]

아무 소용이 없지만 누군가 내가 뭘 잘못하고 있는지 즉시 알게 될 것이라고 확신하며 시간을 내어 이 글을 읽어주셔서 감사합니다!

답변1

예를 들어 ||대신 사용하십시오 .&&

if [ -z "$var" ] || [ -z "$var1" ]

이것배쉬 매뉴얼설명하다:

그리고그리고또는목록은 제어 연산자로 구분된 하나 이상의 파이프 시퀀스입니다.&&그리고||, 각각.그리고그리고또는목록은 왼쪽 연관성으로 수행됩니다.

답변2

귀하가 요구하는 내용은 이미 언급되었습니다.

if [ -z "$var" ] || [ -z "$var1" ]; then
  echo "one or both are empty."
fi

그러나 이것이 유일한 용도라면 변수로 설정할 필요가 없다는 점은 언급할 가치가 있습니다.

if실제로 명령의 종료 상태를 구성에서 직접 확인할 수 있습니다 .[ 특수 쉘 토큰이 아닌 명령입니다. (명령과 완전히 동일합니다 test. 참조 man [)

내가 이해한 바로는 첫 번째 명령의 출력에는 sudo"Optimal"이 포함되어야 하고 두 번째 명령의 출력에는 "fail"이 포함되어야 합니다. 그렇지 않으면 경고를 트리거하려는 것입니다.

이 문제를 다음과 같이 더 명확하게 논의할 수 있을 것 같습니다.

if sudo /usr/StorMan/arcconf GETCONFIG 1 LD 0 | grep -q Optimal &&
   sudo /usr/StorMan/arcconf GETCONFIG 1 LD 1 | grep -q fail
then
  echo "All is well."
else
  echo "Error condition!"
fi

답변3

"둘 중 하나"를 비워두려면 OR을 시도해 보세요 ||.

if [ -z "$var" ] || [ -z "$var1" ]

...그렇게 쉽나요?

답변4

두 가지 솔루션은 다음과 같습니다.

if [[ -z $a || -z $b ]];      ### (not A) OR (not B)
if ! [[ $a && $b ]];          ### not (A and B)

휴대성이 향상되었습니다.

if [ -z "$a" ] || [ -z "$b" ];
if ! ( [ "$a" ] && [ "$b" ] );

이 옵션은 작동할 수 있지만POSIX에 의해 거부됨(>4개 인수: 결과가 지정되지 않았습니다.):

if [ -z "$a" -o -z "$b" ];
if [ ! \( "$a" -a "$b" \) ];

관련 정보