Bash脚本错误处理求助:参数错误及数字验证失效问题
问题修复方案
修正后的完整脚本
#!/bin/bash re='^[0-9]+$' echo "Scegli l'operazione da eseguire tra addizione (+) sottrazione (-) e moltiplicazione (*)" read operazione until [ "$operazione" = "+" ] || [ "$operazione" = "-" ] || [ "$operazione" = "*" ] do echo "L'opzione scelta non è corretta" read operazione done echo "Ora scegli due numeri" read numero1 numero2 until [[ "${numero1}" =~ $re ]] && [[ "${numero2}" =~ $re ]] do echo "I numeri digitati non sono corretti" read numero1 numero2 done echo "Il risultato è $((numero1 $operazione numero2))"
问题1:脚本执行报错的修复
报错根源是until语句的语法错误:
[是bash内置命令,必须与后续内容保留空格,]前也必须保留空格。原代码中[$operazione = - ]缺少空格,导致shell将[$operazione]识别为未知命令。*是shell通配符,直接使用会被自动展开,必须用双引号括起来("*")避免解析异常。- 变量
$operazione未加双引号,若输入为空会导致[命令参数不足,触发too many arguments错误,因此需要用双引号包裹变量("$operazione")。
问题2:数字验证逻辑失效的修复
原代码核心问题是数组引用错误:
- 原代码用
$numero[1]引用数组元素,bash会将其解析为普通变量$numero的值加上字符串[1],而非数组的第1个元素,导致正则匹配完全失效。 - 此处无需使用数组,直接用普通变量
numero1和numero2更简洁,也避免了数组引用的坑。 - 若坚持使用数组,必须用
${numero[1]}的格式正确引用元素。
当输入54 l这类内容时,read numero1 numero2会将54赋值给numero1、l赋值给numero2,修正后的正则匹配会检测到numero2不符合数字格式,触发错误提示。
内容的提问来源于stack exchange,提问作者Giammarco
相关产品推荐
相关产品推荐

