сценарий удара, который проверяет вход, чтобы видеть, является ли это “y”, “n” или другой - не работа

Я записал этот сценарий удара, который предназначен для проверки входа, чтобы видеть, ли это y, n или что-то еще (это будет частью большего проекта):

#!/bin/bash

echo "Have you updated the PATH variable in your .bashrc file yet? [y/n]"
read response

        if [$response = "y"]; then
                echo "Checkpoint passed"
                set $checkpoint = "t"
        elif [$response = "n"]; then
                echo "Please set the PATH variable in your .bashrc file before running this script."
                set $checkpoint = "f"
        else            
                echo "Please only use 'y' and 'n'."
                set $checkpoint = "f"
        fi

Но каждый раз, когда я выполняю его, я получаю ошибку, подобную этому независимо от того, что я вставил:

Have you updated the PATH variable in your .bashrc file yet? [y/n]
y
./snbjdkhome: line 6: [y: command not found
./snbjdkhome: line 9: [y: command not found
Please only use 'y' and 'n'.

Так что не так с моим кодом? (Я являюсь очень новым для окружения сценариев.)

0
задан 15 March 2015 в 08:22

4 ответа

Это ясно даст понять Вас (Проверьте Пробелы):

$ var=c

$ ["$var" == "c"] && echo "OK"
[c: command not found

$ ["$var" == "c" ] && echo "OK"
[c: command not found

$ [ "$var" == "c"] && echo "OK"
bash: [: missing `]'

$ [ "$var" == "c" ] && echo "OK"
OK

Так, необходимо поместить пробел до и после условия при использовании test команда ([ ]).

5
ответ дан 5 October 2019 в 02:25

существует одна простая ошибка на строке 6 и 9. Должно быть пространство между [ и $response в if [$response = "y"]then на строке 6;. точно так же для [ и $response на строке 9'

Также необходимо поместить двойные кавычки [приблизительно 115] для предотвращения ошибок в случае, если пользователь вводит вход с пространством.

4
ответ дан 5 October 2019 в 02:25

Bash интерпретирует Ваш $response как команды, которые он не может найти. Включите их в двойные кавычки как строки, с которыми Вы сравниваете их, и это должно работать как ожидалось.

1
ответ дан 5 October 2019 в 02:25

Кроме того, set команда более экзотична, чем Вы думаете. Вы не используете set управляйте для установки переменных.

Вы знаете, что при вызове сценария оболочки с параметрами что им присваивают $1, $2, $3, …;правильно? ну, одна из вещей set команда делает должен установить $1, $2, $3, … для текущей (интерактивной) оболочки. Так, например,

% set checkpoint="y"
% echo "$checkpoint"
                                (nothing)
% echo "arg1 = '$1', arg2 = '$2', arg3 = '$3'"
arg1 = 'checkpoint=y', arg2 = '', arg3 = ''
% set checkpoint = "y"
% echo "$checkpoint"
                                (nothing)
% echo "arg1 = '$1', arg2 = '$2', arg3 = '$3'"
arg1 = 'checkpoint', arg2 = '=', arg3 = 'y'

который не является тем, что Вы хотите.

И у Вас есть другая проблема. Правильный синтаксис

checkpoint="t"

Если Вы говорите

$checkpoint="t"

и $checkpoint не установлен, эта команда уменьшает до

="t"

который ищет названную программу =t (который, вероятно, не существует). Точно так же

$checkpoint = "t"

уменьшает до

= "t"

который ищет названную программу =. Еще хуже, если $checkpoint уже установлен на "t", и Вы говорите

$checkpoint="f"

затем это интерпретируется как

t="f"

таким образом установка переменной t (т.е. $t).

3
ответ дан 5 October 2019 в 02:25

Другие вопросы по тегам:

Похожие вопросы: