シェルスクリプトでキャリッジリターンなしでdu -kshを機能させるにはどうすればよいですか?

シェルスクリプトでキャリッジリターンなしでdu -kshを機能させるにはどうすればよいですか?

特定の形式に合ったスクリプトを作成します。パイプ間のコマンド結果をエコーする必要があります| 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出力を取得します。実際には説明できませんが、まだ有効です。

おすすめ記事