![명령이 null 또는 출력을 제공하지 않는지 여부를 테스트하는 데 사용되는 조건](https://linux55.com/image/132146/%EB%AA%85%EB%A0%B9%EC%9D%B4%20null%20%EB%98%90%EB%8A%94%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%A0%9C%EA%B3%B5%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%EC%A7%80%20%EC%97%AC%EB%B6%80%EB%A5%BC%20%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EB%8A%94%20%EB%8D%B0%20%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94%20%EC%A1%B0%EA%B1%B4.png)
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
cut
IP 세부 정보를 얻기 위해 구분된 명령을 사용하고 있습니다 . 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_addr
ip_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 )