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

含if/case条件的Bash脚本执行异常,始终输出错误结果

问题排查与修正方案

以下是导致脚本无论输入什么都输出“It’s not the city”的常见原因及对应修正方法:

常见错误点及修正示例

1. 输入捕获错误

如果read命令没有正确将输入赋值给变量,会导致后续条件判断全不匹配。
错误写法:

echo "Enter city:"
read $city  # 错误:变量名前多了$符号

正确写法:

echo "Enter city:"
read city
# 或者带提示的写法
read -p "Enter city: " city

2. if条件判断语法错误

bash中[ ]和[[ ]]的语法规则不同,混用逻辑符会导致条件失效。
错误写法([ ]中误用||):

if [ $city = Kyiv || $city = Berlin ]  # 语法错误,[ ]不支持||
then
    echo "Valid city"
else
    echo "It’s not the city"
fi

正确写法:

# 用[ ]时用-o表示“或”,且变量必须加引号避免空值报错
if [ "$city" = "Kyiv" -o "$city" = "Berlin" -o "$city" = "California" ]
then
    # 对应逻辑处理
else
    echo "It’s not the city"
fi

# 推荐用[[ ]],支持||/&&,语法更灵活
if [[ "$city" == "Kyiv" || "$city" == "Berlin" || "$city" == "California" ]]
then
    # 对应逻辑处理
else
    echo "It’s not the city"
fi

3. case语句格式错误

case分支缺少;;会导致代码继续执行到默认分支,模式后漏写)也会直接失效。
错误写法:

case $city in
    Kyiv echo "Capital of Ukraine"  # 漏写)和;;
    Berlin echo "Capital of Germany"
    *) echo "It’s not the city"
esac

正确写法:

case "$city" in
    "Kyiv")
        echo "Capital of Ukraine"
        ;;  # 终止当前分支,避免执行后续代码
    "Berlin")
        echo "Capital of Germany"
        ;;
    "California")
        echo "US State"
        ;;
    *)
        echo "It’s not the city"
        ;;
esac

4. 大小写不匹配

脚本中判断的是大写开头的Kyiv,如果输入小写kyiv会直接不匹配。若要忽略大小写,可开启bash的不区分大小写匹配:

shopt -s nocasematch  # 开启不区分大小写
case "$city" in
    "Kyiv") echo "Capital of Ukraine" ;;
    # ...其他分支
esac
shopt -u nocasematch  # 关闭不区分大小写(可选)

完整可运行脚本示例

if-elif分支结构

#!/bin/bash
read -p "Enter city: " city

if [[ "$city" == "Kyiv" ]]; then
    echo "Capital of Ukraine"
elif [[ "$city" == "Berlin" ]]; then
    echo "Capital of Germany"
elif [[ "$city" == "California" ]]; then
    echo "US State"
else
    echo "It’s not the city"
fi

if多条件+case语句

#!/bin/bash
read -p "Enter city: " city

if [[ "$city" == "Kyiv" || "$city" == "Berlin" || "$city" == "California" ]]; then
    case "$city" in
        "Kyiv") echo "Capital of Ukraine" ;;
        "Berlin") echo "Capital of Germany" ;;
        "California") echo "US State" ;;
    esac
else
    echo "It’s not the city"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:10:14