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

Bash条件判断报command not found及清屏功能失效问题

问题原因与修复方案

核心错误点

你的脚本报错全是Bash条件判断语法错误和变量赋值语法错误导致的:

1. 第一个if条件的错误

原代码if $choice = "1"会被Bash解析为「执行$choice这个命令,把=和"1"作为参数」。当输入5时,系统会尝试执行5 = "1",自然找不到5这个命令,抛出command not found。

修复方式:
Bash的条件判断必须用[ ]或[[ ]]包裹,且比较运算符两侧必须加空格。推荐用更健壮的[[ ]](Bash扩展语法,支持更多特性),修改为:

if [[ "$choice" == "1" ]]

2. 变量赋值与第二个if条件的错误

  • 原代码$isclear=${isclear:-n}:变量赋值不能加$前缀,正确写法是isclear=${isclear:-n}
  • 原代码if $isclear="y":同样犯了条件判断的语法错误,Bash会把y=y当成命令执行,导致command not found

修复方式:
先修正变量赋值,再把条件判断改为标准格式:

isclear=${isclear:-n}

if [[ "$isclear" == "y" ]]

完整修复后的脚本

#! /bin/bash

echo "  -----------------------------------------------"
echo " /                                               \\"
echo "|              Welcome to myprogram               |"
echo " \\                                               /"
echo "  -----------------------------------------------"
echo 


echo "1: Ping"

read -p "What is your choice ? " choice


if [[ "$choice" == "1" ]]
then
    echo "Launching Ping"
    ./netscrubber/ping.sh

else
    # Bad number
    echo "There's no tool with number $choice"
    read -p "Please try again. Quitting, clear screen ? [y/n, default n]" isclear
    
    isclear=${isclear:-n}

    if [[ "$isclear" == "y" ]]
    then
        echo "Exiting and clearing..."
        sleep 1
        echo "4"
        sleep 1
        echo "3"
        sleep 1
        echo "2"
        sleep 1
        echo "1"
        sleep 1
        clear
        exit
    else
        echo "Exiting without clearing."
        exit
    fi
fi

额外优化建议

  • 给变量加双引号可以避免空值或含空格的变量触发语法错误
  • 用[[ ]]替代[ ]做条件判断,Bash下更健壮,支持&&/||逻辑运算符,还能减少引号的使用
  • 可以给选择逻辑套一层while true循环,让用户无需退出脚本就能重新选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:57:33