特定の形式に合ったスクリプトを作成します。パイプ間のコマンド結果をエコーする必要があります| X |
。
使用しようとすると、du -ksh
常にキャリッジリターンが発生します。
これを処理する方法を知っていますか?
#!/bin/bash
echo -e "|_. Sites-enabled |_. ServerName |_. ServerAlias |_. UserID |_. DocumentRoot |_. Dig ServerName |_. Dig ServerAlias |"
ls /etc/apache2/sites-enabled/* | while read fichier
do
# SiteName & ServerName & ServerAlias & UserID
sitename=($(echo $fichier | cut -d"/" -f5))
serverName=`awk -F"ServerName" '/ServerName/{printf "%s ",$2}' $fichier`
serverAlias=`awk -F"ServerAlias" '/ServerAlias/{printf "%s ",$2}' $fichier`
userID=`awk '/AssignUserID/ {printf "%s ",$2}' $fichier`
echo -e "| "$sitename" | "$serverName" | "$serverAlias" | "$userID" | "
# Size DocumentRoot
home=($(awk -F"DocumentRoot" '/DocumentRoot/{print $2}' $fichier))
for i in "${home[@]}"
do
du -ksh $i && echo -e "|\n"
done
@muru編集:
答えてくれてありがとう。私は初めてシェルスクリプトに触れ、数日間それを学んでいます。
ServerName ServerAliasDocumentRootなど、apache2サイトで仮想ホストを有効にするための値をエクスポートする必要があります。そこから抽出されたドキュメントルートでdu kshを実行して、ホストされたeacjサイトのサイズを確認しました。その後、スクリプトは抽出されたサーバー名とエイリアスを調べて、実際に指している場所を確認します。
最終形式は、特別な形式を使用するWebサイトでオンラインで使用できるように「ボード」に理想的に設定されています(それぞれの最初のヘッダー行はパイプ+アンダースコア+ドット|_で始まります。最後の行はパイプで終わり、次の最初の行はすべて終了します)。ラインはパイプで始まり、終わります)。
ただし、スクリプトを実行すると for ;外部に echo -e "| \n" を入れると、目的の形式は機能しません。仮想ホストで見つかった最初のDocumentRootで停止しているようです。複数のWebホストを含むWebサイトがある場合は、すべてのホストを考慮することはできません。
出力が本当に奇妙に見えるので、キャリッジリターンに関連していると思われます。
2019-04-11 編集
echo
からに切り替えますprintf
。気分がずっと良くなりました。
#!/bin/bash #================================================= == ============================================= # #ファイル:getvhost.sh # #使用法:getvhost.sh # #説明:apache2で有効になっているすべての仮想ホストを見つけて、そのサーバー名とエイリアスを抽出します。 #documentrootセクションでアクティブなウェブサイトのフルサイズを取得し、そのユーザーIDを抽出し、 #サーバー名とエイリアスでDNSルックアップを実行します。 #使用する回答を表示し、フォーマットし、https://plan.ioにコピーして貼り付けます。 #|_。タイトル1 |_。タイトル2 |_。タイトル3 |_。 ... | #|サイト1|サーバー名1|サーバーエイリアス1|...| #|サイト2|サーバー名2|サーバーエイリアス2|...| # #オプション: - - #要件:apache2の/ etc / apache2 / sites-enabledでサイトが有効になっています。 #間違い:--- #気づく:--- #作家:--- #会社: - - #バージョン:1.1 #作成時間:2019.04.07 #改訂日:2019.04.11 #================================================= == ============================================= echo -e "|_.サイトの有効化|_.サーバー名|_.サーバーエイリアス|_.ユーザーID |_.DocumentRoot |_.ディグサーバー名|_.ディグサーバーエイリアス|" ls /etc/apache2/sites-enabled/* | ls /etc/apache2/sites-enabled/* |ファイルを読むとき する #------------------------------------------------ - #サイト名&サーバー名&サーバーエイリアス&ユーザーIDの取得 #------------------------------------------------ - サイト名=($(echo $file | cut -d"/" -f5)) serverName=`awk -F"ServerName" '/ServerName/{printf "%s ",$2}' $file` serverAlias=`awk -F"ServerAlias" '/ServerAlias/{printf "%s ",$2}' $file` userID=`awk' /AssignUserID/ {printf "%s ",$2}' $file` echo -e " | " $sitename " | " $serverName " | " $serverAlias | | " $userID " | \c" #------------------------------------------------ #DocumentRootからWebサイトのサイズを取得します。 #------------------------------------------------ home=($(awk -F"DocumentRoot" '/DocumentRoot/{print $2}' $file)) 私は「${home[@]}」にいます。 する サイズ=`du -sh $i` printf "%s " $size 完璧 エコ-e"|" #------------------------------------------------ - ------ #DIG ServerName と ServerAlias #------------------------------------------------ - ------ dig=($(awk -F"ServerName" '/ServerName/{print $2}' $file)) 私の場合、「${dig[@]}」 する dig1=`dig +noall +回答+short $i` printf "%s " $dig1 完璧 エコ-e"|" dig=($(awk -F"ServerAlias" '/ServerAlias/{print $2}' $file)) 私の場合、「${dig[@]}」 する dig2=`dig +noall +回答+short $i` printf "%s " $dig2 完璧 エコ-e"|" 完璧
答え1
希望の出力が得られませんecho "$(du -ksh $i)"
。切り替えてecho
目的のprintf
出力を取得します。実際には説明できませんが、まだ有効です。