我有一个脚本并尝试将变量中的内容附加到.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
答案 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;
的结果相同至于您遇到的问题,请注意在任何单词之前附加 $ 基本上会使脚本/命令查找具有此类名称的变量而不是文件名。
此致