2017-04-04 3 views
0

플랫 파일을 기반으로 테이블을 업데이트하는 간단한 간단한 스크립트가 있지만 유효하지 않은 형식화 된 변수가 추가되고 목록이 길어지면 문제가 발생할 수 있으므로 concerend입니다.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