【问题标题】:how can read more than one value in variable with shell script如何使用 shell 脚本读取变量中的多个值
【发布时间】:2013-05-31 11:18:17
【问题描述】:

在分隔的变量空间中读取多个值

我有一个存储命令输出的变量。有时命令的输出是单个单词,有时输出命令是多个单词,空格分隔

例子

MAC=  00:1c:c4:5b:6e:fe 00:1c:c4:5b:6e:fe 00:1c:c4:5b:6e:fe 00:1c:c4:5b:6e:fe
echo $MAC

我想使用下面的 if 语句

如果 $mac 有多个单词则 echo not ok else echo ok

提前致谢

【问题讨论】:

  • 我从 MAC2=grep -w "$MAC" juniper.conf | awk '{sub (/;/,"");print}'| awk '{print $4;}' 下面获取值,它通常从文件中 grep 匹配条目
  • @l0b0 MAC= ... 有效的shell代码;它只是以完全不同的方式解释。它将MAC(具有空值)添加到以下命令的环境中。
  • @chepner 你说得对,我应该更具体一点。

标签: linux shell


【解决方案1】:

MAC= 后面不应该有空格。

试试

awk '{print (NF>1?"not ":"")"ok"}'  <<<$MAC

例如

kent$  MAC="00:1c:c4:5b:6e:fe 00:1c:c4:5b:6e:fe 00:1c:c4:5b:6e:fe 00:1c:c4:5b:6e:fe"

kent$  awk '{print (NF>1?"not ":"")"ok"}' <<<$MAC                                   
not ok

【讨论】:

    【解决方案2】:

    如果你想简单地判断$MAC中是否有空格,你可以这样做:

    case $MAC in  
         *\ * )
               echo "not ok"
              ;;
           *)
               echo "ok"
               ;;
    esac
    

    【讨论】:

    • 这行得通,但如果我把它放在我的 if else 条件脚本之前,如果与上述任何规则匹配,它就会停止工作。我想要 if-else 语句,所以我的进一步代码也应该运行。
    【解决方案3】:

    试试:

    if [[ "$MAC" =~ "\s" ]]; then echo not ok; else echo ok; fi
    

    以下将在第一次出现(空格)之前产生字符串:

    address=${MAC%% *}
    

    【讨论】:

    • 我可以读单词而不是空格我想读的前 6 个单词可以吗,因为你的脚本运行良好。
    • 我已经完成了字数统计感谢您的热情回复和支持,
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2013-10-19
    相关资源
    最近更新 更多