0

有一个非常简单的脚本,基本上可以检查条形码。有两个条形码必须检查它们在被制成变量时不会混淆。

基本上第一个条形码应该只包含数字 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

怎么了?有没有更优化的方法来实现这一目标?

4

1 回答 1

7

只有数字:

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

由于这个+符号,这也将进入空字符串的 if 语句。+表示一次或多次,*表示零次或多次。

两个字符,数字,两个字符:

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

编辑:

此外,如果您知道条形码中数字的确切计数,那么您可以使用{n}

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

这意味着2个字母,9个数字,2个字母

于 2013-08-23T13:50:08.147 回答