Search code examples
regexbashvariablessolaris

Variable formatting check in bash script


I have a real simple script to update a table based on a flat file but am concerend as the list keeps getting longer and longer a non valid formatted variable will get introduced and cause issues.

#!/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

The file contents are as such.

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

What I am having difficulty with is how can I set a format check of the $mac and $loc variables so if they don't match it stops running. the $loc can be any 19 digits so just need to make sure its not null and not longer. The mac address needs to be not null and in the format as in the file. I found reference in another post to this check but not sure how to integrate.

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

Looking for help on how to create the validations.

Thanks,


Solution

  • Check MAC address with regex:

    #!/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"
    

    Your regex is for bash only a string if you use quotation marks.