2014-07-24 1 views
1

Выход 1:

Enter your value: 12 
./testscript.sh: line 4: 12: command not found 
Your value is more than 10 

Выход 2:

Enter your value: 5 
./testscript.sh: line 4: 12: command not found 
Your value is more than 10 

Мне нужно знать, что это неправильно. Мой Linux тест только завтра :(

#!/bin/bash 
echo -n "Enter your value: " 
read value 
if [$value -lt 10] 
then 
echo "Your value is less than 10" 
else 
echo "Your value is more than 10" 
fi 
+2

'[' это имя команды (попробуйте 'ls/bin/[' - он часто существует); он должен быть отделен от условия пробелами. Аргумент ']' должен быть аргументом сам по себе, отделенным от остальной части условия теста. Этот вопрос должен быть дубликатом от нескольких десятков до нескольких сотен вопросов - сложность, как всегда, заключается в том, чтобы найти подходящую для использования в качестве эталонного вопроса. –

+0

'if [$ value -lt 10]' – ConcurrentHashMap

+0

'[" $ value "-lt 10]', скорее; цитаты важны. –

ответ

2

ваш если заявление должно быть, как показано ниже. пространство до того ']' и пробел после '['

if [ $value -lt 10 ] 

EDIT

По комментариям

Вы всегда можете найти рекламу d опционально; в конце строки. Следующий скрипт будет работать нормально.

a=20; 
if [ $a -gt 10 ]; 
then 
echo "true"; 
else 
echo "false"; 
fi 

Вам необходимо поставить свое состояние в состояние [состояние]. Ниже один не работает.

(condition) 

Было бы сказать команда не найдена. As '(' is not command. Where as '[' является командой для проверки состояния

+0

Другой вопрос, если я положил; в конце. Кажется, ничего не изменилось if [$ value -lt 10]; Имеет ли; дело? – Matty

+1

@Matty; это потому, что точка с запятой является необязательной в конце строки. Это становится обязательным, если вы пишете 'if [" $ value "-lt 10]; затем echo Hi; else echo Lo; fi' (который может идти все на одной линии). –

+0

вам не нужен; в конце. Почему вы пытаетесь добавить a. просто любопытно. Это необязательно. –

2

И более подходящим способом является использование [[ ]] по сравнению с [ ], когда в Bash, поскольку вы можете избежать расщепления слов и расширения имени пути с помощью . Другие условия, это могут быть также добавлены:

if [[ ! $value =~ [0-9]+ ]]; then 
    echo "Invalid input." 
elif [[ value -lt 10 ]]; then 
    echo "Your value is less than 10." 
elif [[ value -eq 10 ]]; then 
    echo "Your value is 10." 
else 
    echo "Your value is more than 10." 
fi 
+0

хорошо сделанный. :) –

+1

Если вы используете bashisms, почему бы не использовать '(())' вместо '[[]]' и получить преимущество более естественного синтаксиса ('((значение <10))')? –

+0

@CharlesDuffy Да, это тоже хорошее предпочтение. – konsolebox

1

Чтобы бросить еще один вариант в смеси: Баш имеет ((...))- арифметические условия:

if (($value < 10)); then ... 

http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs

Одна вещь, которую вы можете сделать в bash с арифметическими выражениями - это опустить $.

if ((value < 10)); then 

Это отражено немного туманно в Shell arithmetic: «В выражении, переменные оболочки также можно ссылаться по имени без использования синтаксиса расширения параметров.»

Это может обратиться к поклонникам С-подобных языков, но это немного не в ногу с остальными языками, и это не относится ко всем переменным (например, специальные PARAMATERS ($#) и элементы массива (${foo[3]})).

Смежные вопросы