次の簡単なスクリプトがあります。
echo "-------------------------- SOA --------------------------------"
echo " "
echo -n " ---------> "; Dig soa "$1" +short | awk '{print $3}'
出力は次のようになります。
-------------------------- SOA --------------------------------
---------> 2019072905
私の質問は、Digの後に「echo」コマンドを作成して、出力を次のようにすることです。
-------------------------- SOA -----------------------------
---------> 2019072905 <-------------
同様のケースを検索しようとしましたが、関連するケースは見つかりませんでした。
これは可能でしょうか?
前もって感謝します。
代わりに、printf
ですべてを行います。
#!/bin/sh
header='-------------------------- SOA --------------------------'
headerLength=$(awk '{print length()}' <<<"$header")
value=$(Dig soa "$1" +short | awk '{print $3}')
valueString="-----------> $value <-------------"
valueLength=$(awk '{print length()}' <<<"$valueString")
offset=$(((headerLength + valueLength)/2+1))
printf "%s\n\n%${offset}s\n" "$header" "$valueString"
これには、値の長さがどうであれ、常に中央に表示されるという利点があります(value=$1
説明する):
$ foo.sh 2019072905
-------------------------- SOA --------------------------------
-----------> 2019072905 <-------------
$ foo.sh "some random long string"
-------------------------- SOA --------------------------------
-----------> some random long string <-------------
$ foo.sh "foo"
-------------------------- SOA --------------------------
-----------> foo <-------------
cmd=$(Dig soa "$1" +short | awk '{print $3}'; echo -n \<----------;)
echo "-------------------------- SOA --------------------------------"
echo " "
echo -n " ---------> ";echo $cmd
#!/bin/sh
soa=$(Dig soa "$1" +short | awk '{print $3}')
cat <<__EOF__
-------------------------- SOA -----------------------------
---------> $soa <-------------
__EOF__
ところで、SOAの周りにあるすべてのヘッダーガベージを印刷すると、このスクリプトの出力を別のスクリプトへの入力として使用することが無意味に難しくなるため、問題は間違っていると思います...現在、そうする必要があると現在考えていない場合は、将来的にはそうなるかもしれません。出力の冗長性は、UNIXでは「罪」です:)-スクリプトを書くとき、出力は最終的には他人の(自分自身を含む)インプットである。
私はその質問を無視したでしょうが、私は他の答えをさらに嫌いでした。あなたが何か間違ったことをするつもりなら、あなたはそれをきちんとやるべきかもしれません。