2013-08-23 2 views
0

Получил очень простой скрипт, который в основном проверяет штрих-коды. Есть два штрих-кода, которые необходимо проверить, чтобы их не путали, когда они превращались в переменную.Оператор IF в BASH не делает то, что ожидается

В основном первый штрих-код должен содержать только цифры 0-9, а второй штрих-код должен содержать две буквы, затем некоторые цифры, а затем еще две буквы, такие как AB123456789CD.

Если они сбиты с толку и читаются в неправильном порядке, тогда он воспроизводит звук ошибки. Это то, что я до сих пор, верхний работает, но я не уверен, что это лучшее решение, а нижний не делать то, что я хочу:

echo -e $BLUE"Please scan the first barcode"$ENDCOLOUR 
read -p "Barcode: " BARCODE1 
if [[ "$BARCODE1" =~ [a-z] ]] ; then 
play -q ./error.wav 
else 

echo -e $BLUE"Please scan the second barcode"$ENDCOLOUR 
read -p "Barcode: " BARCODE1 
if [[ "$BARCODE2" =~ [a-z0-9] ]] ; then 
play -q ./error.wav 
else 

echo "'$BARCODE1',$BARCODE2'" >> barcodes.csv 
fi 
fi 

Что случилось? И есть ли более оптимальное средство для достижения этого?

ответ

7

Только номера:

if ! [[ $BARCODE1 =~ ^[0-9]+$ ]]; then 

Из-за + знак это собирается ввести если заявление для пустых строк, а также. + означает, что один или несколько раз и * означает ноль или более раз.

Два символа, цифры, символы: два

if ! [[ $BARCODE1 =~ ^[a-zA-Z][a-zA-Z][0-9]+[a-zA-Z][a-zA-Z]$ ]]; then 

Еще раз, это не будет соответствовать строк, как 'AABB'. Если вы думаете, что «AABB» является допустимым штрих-код, а затем использовать это:

if ! [[ $BARCODE1 =~ ^[a-zA-Z][a-zA-Z][0-9]*[a-zA-Z][a-zA-Z]$ ]]; then 

EDIT:

Кроме того, если вы знаете точное количество цифр в штрих-коде, то вы можете использовать {n}

if ! [[ $BARCODE1 =~ ^[a-zA-Z]{2}[0-9]{9}[a-zA-Z]{2}$ ]]; then 

Что означает 2 буквы, 9 чисел, 2 буквы

+0

ура! Как работает бит? –

+2

Я просто добавил! чтобы отрицать выражения –

+0

@ Aleks-DanielJakimenko Это хорошо. Вам все равно нужно процитировать ваши регулярные выражения. Возможно, я просто отредактирую ваше сообщение для вас. –

Смежные вопросы