使用awk输出作为变量进行字符串比较

Mar*_*arc 0 macos shell awk

我正在过滤ifconfigmacOS(High Sierra)上的输出以使用简单的if语句触发动作,尽管虽然相应的字符串看起来匹配(当测试时echo)但未触发动作.

运行脚本时,如果网络en1处于活动状态,则预期的操作是打印确定.

我试过了:

  • printf "%s"awk命令中
  • 使用双(和简单)引用 "active"
  • 持有active一个变量进行比较
  • 替换en1_status=`...`en1_status=$(...)

没有成功.

#!/bin/bash
en1_status=`ifconfig en1 | grep "status: " | awk '{print $2}'`
if [ "$en1_status" = active ]; then
    echo OK
fi
Run Code Online (Sandbox Code Playgroud)

而且$en1_status似乎匹配active:

echo $en1_status
active
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 5

这通常意味着您的变量中有非打印字符 - 如语法高亮或DOS换行符.

一种简单的方法是,如果您将grep实例设置为始终插入颜色代码,--color=always而不是默认(更安全)--color=auto.

要跟踪此情况,请比较以下命令的输出:

printf '%s' "$en1_status" | xxd
printf '%s' inactive | xxd
Run Code Online (Sandbox Code Playgroud)

您也可以grep通过awk搜索来实现配置:

en1_status=$(ifconfig en1 | awk '/status: / { print $2 }')
Run Code Online (Sandbox Code Playgroud)