2017-04-04 16 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桁にすることができるので、nullでなく、それ以上でないことを確認する必要があります。 macアドレスはnullでなく、ファイル内の形式である必要があります。私はこの小切手の別の投稿で参照を見つけましたが、どのように統合するかはわかりません。

`[[ "$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

関連する問題