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正确识别目标变量。
额外优化建议
添加输入合法性校验:防止用户输入非数字内容导致计算报错,示例校验逻辑:
# 校验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 fiawk替代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
相关产品推荐
相关产品推荐

