有一个非常简单的脚本,基本上检查条形码。必须检查两个条形码,使它们在变成变量时不会混淆。
基本上第一个条形码应该只包含数字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
怎么了?是否有更好的方法来实现这一目标?
答案 0 :(得分: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个字母