您好我正在尝试编写脚本,以便在使用awk从文本文件中满足表达式时提取一行。
因此,如果我在shell中使用此命令我正确输出但在脚本上它不起作用可能因为$ 1被识别为用户在shell上给出的参数。 / p>
这是我的剧本:
#!/bin/bash
declare -a email=(test@test.com)
spam=`su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk '{if ($1>500){print $2}}'`
for i in "${email[@]}"
do
echo "$spam"| /opt/zimbra/postfix/sbin/sendmail $i
done
但是脚本发送的电子邮件只有这个主体:
su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk '{if (>500){print }}
我该怎么做?
答案 0 :(得分:1)
试试这个;
#!/bin/bash
a=$1
declare -a email=(test@test.com)
spam=`su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk -v var="$a" '{if (a>500){print $2}}'`
for i in "${email[@]}"
do
echo "$spam"| /opt/zimbra/postfix/sbin/sendmail $i
done
答案 1 :(得分:0)
尝试使用$
\
个字符
spam=`su - zimbra -c 'cat /var/log/zimbra.log | sed -n 's/.*sasl_username=//p' | sort | uniq -c | sort -n -r' | awk '{if (\$1>500){print \$2}}'`