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

Shell脚本中expected_yield变量无输出问题求助

Shell脚本预期产量计算问题排查与修复

核心错误原因

你的脚本中read命令的语法格式错误:提示文本的双引号与变量名之间缺少空格,例如read -p "Enter water applied (in inches): "water_applied,Shell会将"water_applied"识别为提示信息的一部分,而非要赋值的变量名,导致water_applied、crop_area、selected_crop_WUE三个变量均未被正确读取,后续bc计算自然无法得到有效结果。

修正后的脚本

echo "Calculate Expected Yield"
read -p "Enter water applied (in inches): " water_applied
read -p "Enter crop area (in acres): " crop_area
read -p "Enter WUE value: " selected_crop_WUE
expected_yield=""
expected_yield=$(echo "scale=2; $water_applied * ($selected_crop_WUE / 100) * $crop_area" | bc)
echo "Expected yield: $expected_yield kg/acre"

仅需在每个read命令的提示文本双引号后添加空格,即可让Shell正确识别目标变量。

额外优化建议

  1. 添加输入合法性校验:防止用户输入非数字内容导致计算报错,示例校验逻辑:

    # 校验water_applied是否为有效数字
    if ! [[ "$water_applied" =~ ^[0-9.]+$ ]]; then
        echo "错误:灌水量必须为数字"
        exit 1
    fi
    
    # 同理校验crop_area和selected_crop_WUE
    if ! [[ "$crop_area" =~ ^[0-9.]+$ ]]; then
        echo "错误:种植面积必须为数字"
        exit 1
    fi
    
    if ! [[ "$selected_crop_WUE" =~ ^[0-9.]+$ ]]; then
        echo "错误:WUE值必须为数字"
        exit 1
    fi
    
  2. awk替代bc的正确写法:若改用awk计算,需通过-v参数传递变量并在BEGIN块执行计算:

    expected_yield=$(awk -v wa="$water_applied" -v ca="$crop_area" -v wue="$selected_crop_WUE" 'BEGIN{printf "%.2f", wa * (wue / 100) * ca}')
    

内容的提问来源于stack exchange,提问作者Primal Chaos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:52:15