Bash脚本问题

时间:2010-07-20 22:31:56

标签: bash scripting awk ifconfig

我可以使用我想要的输出运行此命令:

ifconfig eth0 | grep HWaddr | awk '{print $5}'

但是,当我将命令设置为变量并打印变量时,我收到错误:

CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
$CASS_INTERNAL

my internal xxx ip: command not found

奇怪的是 - 我的内部IP实际上出现了。如何在不出错的情况下解决这个问题?它应该没关系,但我使用的是最新版本的Ubuntu。

5 个答案:

答案 0 :(得分:4)

CASS_INTERNAL=`ifconfig eth0 | grep HWaddr | awk '{print \$5}'`
echo $CASS_INTERNAL

您:

$CASS_INTERNAL

尝试将其作为命令运行。

答案 1 :(得分:4)

您没有打印变量,而是将其作为命令名运行。你正在寻找

echo "$CASS_INTERNAL"

(养成总是在变量替换上加双引号的习惯。)

更高级的外壳备注:在这种情况下无关紧要,但一般echo可能会遇到一些特殊字符(-\\)的问题,所以最好是使用以下更复杂但完全可靠的命令:

printf "%s\n" "$CASS_INTERNAL"

答案 2 :(得分:4)

不必使用grep

ifconfig eth0 | awk '/HWaddr/{print $5}'

答案 3 :(得分:1)

你可能想要

吗?
echo $CASS_INTERNAL

答案 4 :(得分:1)

好吧,你首先grep HWaddr,所以这一行的第五个字段是有问题的网络适配器的MAC地址 - 而不是你的本地IP地址。

其他人建议解决方案是简单地回显结果,这意味着如果此示例中的eth0在该行执行的那个时间点不可用,则它将不起作用。

根据我的理解,您希望将所需的命令行放在变量中,然后再评估 it 。此模式通常称为延迟评估,并使用内置的 eval 进行possible in bash

#put the desired command in variable
CASS_INTERNAL='ifconfig eth0 | grep HWaddr | awk "{print \$5}"'

# ....

#at later on - evaluate its contents!
eval $CASS_INTERNAL
11:22:33:aa:bb:cc