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
相关产品推荐
相关产品推荐

