私は初めてbashに触れ、いくつかの小さなスクリプトを作って学びようとしています。
同時に、複数のドメインのDNSエントリを見つけるために小さなスクリプトを作成しました。ドメインは属性として提供されます。
COUNTER=0
DOMAINS=()
for domain in "$@"
do
WOUT_WWW=$(dig "$domain" +short)
if (( $(grep -c . <<<"$WOUT_WWW") > 1 )); then WOUT_WWW="${WOUT_WWW##*$'\n'}" ; fi
WITH_WWW=$(dig "www.${domain}" +short)
if (( $(grep -c . <<<"$WITH_WWW") > 1 )); then WITH_WWW="${WITH_WWW##*$'\n'}" ; fi
DOMAINS[$COUNTER]="$domain|$WOUT_WWW|$WITH_WWW"
COUNTER=$(($COUNTER+1))
done
それでは、新しい「多次元」配列を繰り返して、mysqlテーブルと同じ出力を提供したいと思います。
+------------------------------+
| Row 1 | Row 2 | Row 3 |
+------------------------------+
| Value | Value | Value |
+------------------------------+
どうすればいいですか?
ベストアンサー1
perl
のモジュールの使用Text::ASCIITable
(複数行のセルもサポートされています):
print_table() {
perl -MText::ASCIITable -e '
$t = Text::ASCIITable->new({drawRowLine => 1});
while (defined($c = shift @ARGV) and $c ne "--") {
push @header, $c;
$cols++
}
$t->setCols(@header);
$rows = @ARGV / $cols;
for ($i = 0; $i < $rows; $i++) {
for ($j = 0; $j < $cols; $j++) {
$cell[$i][$j] = $ARGV[$j * $rows + $i]
}
}
$t->addRow(\@cell);
print $t' -- "$@"
}
print_table Domain 'Without WWW' 'With WWW' -- \
"$@" "${WOUT_WWW[@]}" "${WITH_WWW[@]}"
ここで、WOUT_WWW
合計WITH_WWW
配列は次のように構成されます。
for domain do
WOUT_WWW+=("$(dig +short "$domain")")
WITH_WWW+=("$(dig +short "www.$domain")")
done
これは作る:
.---------------------------------------------------------------------.
| Domain | Without WWW | With WWW |
+-------------------+----------------+--------------------------------+
| google.com | 216.58.208.142 | 74.125.206.147 |
| | | 74.125.206.104 |
| | | 74.125.206.106 |
| | | 74.125.206.105 |
| | | 74.125.206.103 |
| | | 74.125.206.99 |
+-------------------+----------------+--------------------------------+
| stackexchange.com | 151.101.65.69 | stackexchange.com. |
| | 151.101.1.69 | 151.101.1.69 |
| | 151.101.193.69 | 151.101.193.69 |
| | 151.101.129.69 | 151.101.129.69 |
| | | 151.101.65.69 |
+-------------------+----------------+--------------------------------+
| linux.com | 151.101.193.5 | n.ssl.fastly.net. |
| | 151.101.65.5 | prod.n.ssl.us-eu.fastlylb.net. |
| | 151.101.1.5 | 151.101.61.5 |
| | 151.101.129.5 | |
'-------------------+----------------+--------------------------------'