명령이 null 또는 출력을 제공하지 않는지 여부를 테스트하는 데 사용되는 조건

명령이 null 또는 출력을 제공하지 않는지 여부를 테스트하는 데 사용되는 조건

AIX의 각 LPAR에 대해 HMC에서 IP 주소 수집을 실행 중입니다.

$ lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version --filter lpar_names=ABCD123
ABCD123:Not Activated::Unknown
$ lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version --filter lpar_names=ABCD456
ABCD456:Running:10.8.34.21:VIOS 2.2.5.20

cutIP 세부 정보를 얻기 위해 구분된 명령을 사용하고 있습니다 . IP가 아닌 값은 출력 데이터가 아닙니다.

$ lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version --filter lpar_names=ABCD123 | cut -d : -f3
10.8.34.21
$ lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version --filter lpar_names=ABCD456 | cut -d : -f3

일부 서버 IP 주소를 사용할 수 없습니다. 알 수 없는 값을 할당하기 위해 null 또는 출력이 없는 명령을 무시하도록 if 명령에 지시하는 방법

이 조건을 테스트하여 가치 없는 데이터를 얻는 방법을 알려주실 수 있나요? 다음과 같은 변수를 할당할 수 있습니다.ipaddr=unknown

답변1

for name in ABCD123 ABCD456; do
    ip_addr=$( lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version --filter lpar_names="$name" | cut -d : -f 3 )

    printf 'Got IP address "%s" for lpar name "%s"\n' "${ip_addr:-unknown}" "$name"
done

비어 있거나 변수가 설정되지 않은 경우(여기서는 항상 값으로 설정되지만 비어 있을 수 있음) 매개변수 확장은 ${ip_addr:-unknown}문자열로 확장되고, 그렇지 않으면 변수 값으로 확장됩니다.unknown$ip_addrip_addr

답변2

bash함께 제공되는 기본 매개변수 확장을 사용하세요 .

ipaddr="$(lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version --filter lpar_names=ABCD123 | cut -d : -f3)"
echo "${ipaddr:-unknown}"

먼저, 서브셸 구성을 사용하여 $( command )출력을 캡처 command하고 이를 변수에 할당합니다. 관련 명령에 yours 가 포함되어 있으므로 cut명령이 IP 주소를 반환하지 않는 경우 예상대로 올바르게 null이 됩니다.

그런 다음 설정되지 않았거나 비어 있는 경우 ${var:-default}제공된 기본값으로 확장되는 생성자를 사용합니다.var

변수를 여러 번 참조하려는 경우 기본 할당을 사용할 수도 있습니다.놓다변수가 null로 설정되지 않은 경우 변수 값은 기본값으로 설정됩니다.

$ echo "$foo"

$ echo "${foo:=bar}"
bar
$ echo "$foo"
bar

또는 스크립트가 설정되지 않았거나 비어 있으면 스크립트를 중지하고 오류를 발생시킵니다.

$ echo "${bar:?bar is unset or empty}"
-bash: bar: bar is unset
$ echo $?
1

답변3

이를 수행하는 방법에는 여러 가지가 있습니다. 한 가지 기술은 다음과 같습니다.

ipaddr=$( lssyscfg -m 780 -r lpar -F name:state:rmc_ipaddr:os_version \
    --filter lpar_names=ABCD123 | cut -d : -f3 | grep . || echo unknown )

관련 정보