2017-04-04 26 views
0

我有一個真正簡單的腳本來更新基於平面文件的表格,但是由於列表越來越長,非有效的格式化變量將被引入並導致問題,bash腳本中的變量格式化檢查

#!/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}$" ]]` 

尋找如何創建驗證的幫助。

謝謝,用正則表達式

回答

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" 

你的正則表達式是對於bash只有在使用引號的字符串。

+0

非常感謝你! – cw2