【问题标题】:Variable formatting check in bash scriptbash 脚本中的变量格式检查
【发布时间】:2017-08-30 01:44:15
【问题描述】:

我有一个非常简单的脚本来更新基于平面文件的表,但我担心列表越来越长,一个无效的格式化变量将被引入并导致问题。

#!/bin/bash

OLDIFS=$IFS
IFS=,
file1=file.csv

while read mac loc; do

dbaccess modemdb <<EndOfUpdate 2>/dev/null
UPDATE profile 
SET localization= '$loc' 
WHERE mac_address = '$mac';
EndOfUpdate

done <"$file1"
IFS=$OLDIFS

文件内容是这样的。

12:BF:20:1B:D3:22,RED-1234
12:BF:20:2D:FF:1B,BLUE-1234
12:BF:20:ED:74:0D,RED-9901
12:BF:20:02:69:7C,GREEN-4321
12:BF:20:02:6B:42,BROWN
12:BF:20:ED:74:0D,BLACK

我遇到的困难是如何设置 $mac 和 $loc 变量的格式检查,以便如果它们不匹配它会停止运行。 $loc 可以是任何 19 位数字,因此只需要确保它不为空且不再更长。 mac 地址不能为空,格式与文件中的一样。我在另一篇文章中找到了此检查的参考,但不确定如何集成。

`[[ "$MAC_ADDRESS" =~ "^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$" ]]`

寻求有关如何创建验证的帮助。

谢谢,

【问题讨论】:

    标签: regex bash variables solaris


    【解决方案1】:

    使用正则表达式检查 MAC 地址:

    #!/bin/bash
    
    file1=file.csv
    
    while IFS="," read mac loc; do
      if [[ "$mac" =~ ^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$ ]]; then
        dbaccess modemdb <<EndOfUpdate 2>/dev/null
    UPDATE profile 
    SET localization= '$loc' 
    WHERE mac_address = '$mac';
    EndOfUpdate
      else
        echo "Error: $mac"
      fi
    done <"$file1"
    

    如果您使用引号,则您的正则表达式仅适用于 bash。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 2022-01-15
      相关资源
      最近更新 更多