whois=`whois 100.43.81.149`
bool="$(printf %s\\n "$whois" | grep -q netname:)"
if $bool;
then
echo "netname: is available"
else
echo "netname: is not available"
fi
whois
명령 정보를 whois
변수 에 저장 하려고 합니다 . 그런 다음 해당 변수에서 netname:
문자열을 검색 하고 결과를 bool
변수에 저장합니다.
하지만 이 경우에는 있어서는 안 되는 변수임에도 불구하고 bool
변수는 항상 대소문자가 적용됩니다 .true
이 문제의 원인은 무엇입니까?
답변1
여기에는 두 가지 주요 문제가 있습니다.
$(
종료 코드 대신 명령에서 표준 출력을 가져옵니다.if $bool
이름이 데이터와 일치하는 명령이$bool
bool이 0인지 1인지 여부 대신 0을 반환하는지 확인합니다. 즉,$bool
"foo"가 포함되어 있으면 "foo" 명령이 실행됩니다.
직접 확인해보세요:
if whois 100.43.81.149 | grep -q netname:; then
...
fi
직접 실행하는 대신 종료 코드를 저장해야 하는 경우 [ -eq ,.. ]
POSIX가 아닌 것을 사용하세요 ((
.
whois 100.43.81.149 | grep -q netname:
netname_exists=$?
if (( netname_exists == 0 )); then # Non-POSIX
if [ "$netname_exists" -eq 0 ]; then # POSIX
나중에 사용하기 위해 출력을 저장해야 하는 경우 whois
다음을 수행할 수 있습니다.
whois_data=$(whois 100.43.81.149)
printf '%s\n' "$whois_data" | grep -q netname: # or use <<< (non-POSIX) or <<
netname_exists=$?