You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 06:11:15