bash脚本

时间:2017-04-04 17:55:04

标签: regex bash variables solaris

我有一个真正简单的脚本来更新基于平面文件的表,但是随着列表越来越长而变得越来越长,一个无效的格式化变量将被引入并导致问题。

#!/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地址不需要为null,格式为文件格式。我在另一篇文章中找到了对此检查的引用,但不确定如何集成。

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

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

谢谢,

1 个答案:

答案 0 :(得分:2)

使用正则表达式检查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"

如果使用引号,你的正则表达式只能用于字符串。