编写适合特定格式的脚本。我需要在管道之间回显命令的结果| 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:
嘿,谢谢你的回答。我对 shell 脚本非常陌生,刚学习了几天。
我需要导出启用 apache2 站点中的虚拟主机的值,例如 ServerName ServerAlias DocumentRoot 等。从那里,我在提取的文档根上运行 du ksh 以查看托管的 eacj 网站的大小。之后,脚本将对提取的服务器名和别名进行挖掘,以检查它真正指出的位置。
最终格式理想地设置在“板”中,以便在使用特殊格式的网站上在线利用(每个第一个标题行以管道+下划线+点 |_ 开头。最后一行以管道结尾,然后每个第一个之后的线以管道开始和结束)。
但是,在运行脚本时,如果我将 echo -e "| \n" 放在 for ; 之外,则无法使所需的格式起作用。它似乎停在虚拟主机中找到的第一个 DocumentRoot 处。如果我有一个包含多个虚拟主机的网站,它就无法将它们全部考虑在内。
我怀疑与回车有关的东西,因为输出对我来说真的很奇怪。
编辑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 |_.Dig 服务器名称 |_.Dig 服务器别名 |" 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 获取网站的大小 #------------------------------------------------- home=($(awk -F"DocumentRoot" '/DocumentRoot/{print $2}' $file)) 对于我在“${home[@]}” 做 大小=`du -sh $i` printf "%s " $大小 完毕 回显-e“|” #-------------------------------------------------------- # 对 ServerName 和 ServerAlias 进行 DIG #-------------------------------------------------------- dig=($(awk -F"ServerName" '/ServerName/{print $2}' $file)) 对于“${dig[@]}”中的我 做 dig1=`dig +noall +answer +short $i` printf "%s " $dig1 完毕 回显-e“|” dig=($(awk -F"ServerAlias" '/ServerAlias/{print $2}' $file)) 对于“${dig[@]}”中的我 做 dig2=`dig +noall +answer +short $i` printf "%s " $dig2 完毕 回显-e“|” 完毕
答案1
无法获得所需的输出echo "$(du -ksh $i)"
。切换到echo
并printf
获得所需的输出。无法真正解释它,但仍然有效。