簡體   English   中英

bash腳本中的變量格式檢查

[英]Variable formatting check in bash script

我有一個真正簡單的腳本來更新基於平面文件的表,但是很禮貌,因為列表會越來越長,一個無效的格式化變量將被引入並引起問題。

#!/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位數字,因此只需確保其不為null和更長。 mac地址必須不為null,並且格式必須與文件中的格式相同。 我在另一篇文章中找到了對此檢查的參考,但不確定如何集成。

`[[ "$MAC_ADDRESS" =~ "^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{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字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM