我正在研究运行的linux bash脚本,并从CSF Firewall接收变量。 CSF防火墙发出的命令是system($config{RT_ACTION},$ip,$check,$block,$cnt,$mails); 其中$config{RT_ACTION}是我脚本的路径。

$mails=2013-04-16 11:57:14 1US8Fq-0001VC-Uu <= from@domain.com H=reverse.trace.of.ipaddress (server) [xxx.xxx.xxx.xxx]:PORT I=[xxx.xxx.xxx.xxx]:PORT P=esmtp S=5964 id=SOMEIDHERE$@com T="EMAILSUBJECT" from <from@domain.com> for to@domain.com

当我尝试运行此命令来获取from@domain.com时出现问题。

DUMPED=$5
myvar=$(echo "$DUMPED" | awk '{print $5}')

如果不清楚,$ mails将传递到我的脚本,转换为$ 5,我想用awk提取的信息位于第5列,也就是5美元而不是$ 5输出from@domain.com它输出$ mails的全部内容。 我错过了什么? 为什么不将awk设置为from@domain.com?

===============>>#1 票数:0 已采纳

关于什么:

DUMPED=$5
myvar=`echo $DUMPED | cut -d" " -f5`

或者,使用AWK:

DUMPED=$5
myvar=`echo $DUMPED | awk '{print $5}'`

它对我有用......

===============>>#2 票数:0

希望其中一些是说明性的。 最后,我只是展示你已经有效的东西,除非你试图用字母中的美元符号来定义变量。

$ # Define mails. Don't do $mails=something, that will fail.
$ mails='2013-04-16 11:57:14 1US8Fq-0001VC-Uu <= from@domain.com H=reverse.trace.of.ipaddress (server) [xxx.xxx.xxx.xxx]:PORT I=[xxx.xxx.xxx.xxx]:PORT P=esmtp S=5964 id=SOMEIDHERE$@com T="EMAILSUBJECT" from <from@domain.com> for to@domain.com'
$ # Direct the value of $mails to awk's standard input using a here string:
$ awk '{print $5}' <<< "$mails"
from@domain.com
$ # Direct the value of $mails to awk's standard input using echo and a pipe:
$ echo "$mails"| awk '{print $5}'
from@domain.com
$ # Assign the fifth word of "$mails" to the name "myvar" using read;
$ read _ _ _ _ myvar _ <<< "$mails"
$ echo "$myvar"
from@domain.com

  ask by hiphopsmurf translate from so

未解决问题?本站智能推荐:

关注微信公众号