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
これには2つの主な問題があります。
$(
終了コードの代わりにコマンドから標準出力を取得します。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=$?