将变量中的内容追加到日志文件中

时间:2017-02-25 21:57:09

标签: linux bash ubuntu virtual-machine virtualbox

我有一个脚本并尝试将变量中的内容附加到.log文件中。我在另一篇文章(How can I append a variable text to last line of file via command line?)上看到你可以使用echo“$(cat $ FILE)$ APPEND”> $ FILE。我尝试这样做,它能够无错误地运行我的脚本,并通过终端提供我需要的答案,但它不会将其附加到我的日志文件中。任何人都可以给我任何指示吗?

#!/bin/bash
mdate=echo date
mcpu=echo $[100-$(vmstat 1 2 |tail -1|awk ‘{print $15}’)]%
mmem=free | grep Mem | awk ‘{print $3/$2 * 100.0}’
sudo cat /dev/null > /home/daniel/systemstatus.log
echo “$(cat $systemstatus.log)$mdate” >> $systemstatus.log
echo “$(cat $systemstatus.log)$mcpu” >> $systemstatus.log
echo “$(cat $systemstatus.log)$mmem” >> $systemstatus.log

3 个答案:

答案 0 :(得分:3)

您的代码需要多次修改,您不能按照您尝试的方式使用命令输出分配变量,您需要使用命令替换(var=$(command)):

mdate=$(date)
mcpu=$(( 100 - $(vmstat 1 2 | tail -1| awk '{print $15}') ))
mmem=$(free | grep Mem | awk '{print $3/$2 * 100.0}')

您的帖子包含对shell无效的引号。使用单引号'或双引号"(每个都有其目的)。

但是记录部分比你想象的要简单

logfile=/home/daniel/systemstatus.log
echo "$mdate" >"$logfile"  # Overwrites the previous log file
echo "$mcpu"  >>"$logfile" # Appends to the log file
echo "$mmem"  >>"$logfile" # Appends to the log file

如果在变量中捕获命令输出的唯一原因是日志记录,则可以通过重定向到日志文件而不捕获输出来进一步简化。

date >"$logfile" # Overwrites the previous log file
echo $(( 100 - $(vmstat 1 2 | tail -1| awk '{print $15}') )) >>"$logfile"
free | grep Mem | awk '{print $3/$2 * 100.0}' >>"$logfile"

你甚至可以先进行重定向,根据你的喜好可能会更清晰:

>"$logfile"  date # Overwrites the previous log file
>>"$logfile" echo $(( 100 - $(vmstat 1 2 | tail -1| awk '{print $15}') ))
>>"$logfile" free | grep Mem | awk '{print $3/$2 * 100.0}'

这个答案假定你的命令实际上有效(我没有测试过它们)。

答案 1 :(得分:1)

尝试在$

之前删除systemstatus

当您键入$systemstatus时,它表示名为" systemstatus"的变量,而不是systemstatus文件。

答案 2 :(得分:1)

以下内容应该有效:

#!/bin/bash
mdate=$(echo date)
mcpu=$(echo $[100-$(vmstat 1 2 |tail -1|awk '{print $15}')]%)
mmem=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
>/home/daniel/systemstatus.log
echo “$(cat $systemstatus.log)$mdate” >> systemstatus.log
echo “$(cat $systemstatus.log)$mcpu” >> systemstatus.log
echo “$(cat $systemstatus.log)$mmem” >> systemstatus.log

请注意,如果您希望将命令的输出存储在bash中,则应该在 $()或“`中对命令进行舍入。但是,现在不推荐使用严重重音符号。< / p>

此外,使用 cat / dev / null&gt; 清空Linux中的文件基本上与使用&gt;

的结果相同

至于您遇到的问题,请注意在任何单词之前附加 $ 基本上会使脚本/命令查找具有此类名称的变量而不是文件名。

此致