Я новичок в сценарии оболочки, и в настоящее время я сталкиваюсь с проблемой, которую не могу решить.

Это ошибка:

vmw_ubuntu@vmwubuntu:~$ BookInv
/home/vmw_ubuntu/BookInv: line 155: [=: command not found

Это мой код (простой цикл)

#!/bin/bash
until [$number= "7"];do 
bla bla bla
echo -n "Please enter your option : "
read number
case $number in
7) exit;;
*) echo "Please enter number from 1-7"
esac
done

Мой код по-прежнему работает отлично, только каждый раз, когда мой цикл перезапускается, появляется ошибка, и я не могу найти решение этой проблемы.

По сути, я хочу избавиться от ошибки "команда не найдена". Что-то не так с моими кодами?

Проблема в том, что я попытался опустить пробелы и поставить "на моем $ номер, однако проблема все еще сохраняется.

На комментарий о да жалуется сообщение об ошибке

[=

и определение это означает

number=0

однако, это не решает мою проблему, это все еще показывает мне ошибку. У меня есть другие коды в нем, только некоторые функции, но эта проблема была там все время и, кажется, не зависит от функций, так как я удалил все функции и попробовал это.
Моя программа все еще работает, но просто выдает мне следующее сообщение об ошибке:

vmw_ubuntu@vmwubuntu:~$ BookInv
/home/vmw_ubuntu/BookInv: line 155: [=: command not found

1 ответ1

2

Поскольку в вашем сценарии нет строки 155, я предполагаю, что она соответствует строке 2 того, что вы нам показали.

У вас сейчас есть

until [$number = "7"];do

Пробелы важны в bash, а тест требует пробелов в скобках. [ это псевдоним для test . Так что вам по крайней мере нужно иметь

until [ $number = " 7" ]; do

Теперь, когда $number пуст, bash пытается вызвать команду [= . Поскольку $number может быть пустым или содержать пробелы, вы также должны заключить его в кавычки, чтобы он считался одним и только одним аргументом. Линия должна быть

until [ "$number" = "7" ]; do

(Цитаты около 7 на самом деле не нужны, но они не могут повредить)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .