2013-09-04 3 views
0

Я пытаюсь выполнить следующий сценарий оболочкиОшибка при выполнении сценария оболочки

#!/bin/sh 
echo "start" 
if [ $# != 2 || $1 != "first" || $1 != "second" ] 
then 
    echo "Error" 
fi 
echo "done" 

, и я получаю следующий результат: начать ./autobuild.sh: строка 3: [: отсутствует ']» ./autobuild.sh: линия 3: =: команда не найдена ./autobuild.sh: линия 3: =: команда не найдена сделано

Я не знаю, как устранить ошибки. Даже если я использую -ne вместо !=, я получаю те же ошибки. Пожалуйста помоги.

+0

*** '==' *** не существует в тире, если вы используете Ubuntu. Вместо этого используйте *** '=' ***. –

+0

на самом деле я получаю ошибки из-за '! =' –

+0

Я бы предложил '! =' Не является фактической синтаксической ошибкой: http://pic.dhe.ibm.com/infocenter/aix/v7r1/index.jsp ? тема =% 2Fcom.ibm.aix.baseadmn% 2Fdoc% 2Fbaseadmndita% 2Fkorn_shell_conditional_exp.htm –

ответ

2

Вашего синтаксис неверен. Если вам нужно несколько условий в инструкции if, вам нужно иметь несколько блоков []. Попробуйте:

if [ $# != 2 ] || [ $1 != "first" ] || [ $1 != "second" ] 

Но, это лучше использовать [[ (если ваша оболочка поддерживает его), поскольку она является более безопасным в использовании. Я хотел бы пойти на:

if [[ $# -ne 2 || $1 != "first" || $1 != "second" ]] 

Смотрите этот вопрос в скобках: Is [[ ]] preferable over [ ] in bash scripts?

0

Это должно работать:

#!/bin/sh 
echo "start" 
if [ $# -ne 2 -o $1 -ne "first" -o $1 -ne "second" ] 
then 
    echo "Error" 
fi 
echo "done" 
1

Хотя ИЛИ ИНГ условия должны быть индивидуальный следующим образом:

#!/bin/sh 
echo "start" 
if [ $# != 2] || [ $1 != "first" ] || [ $1 != "second" ] 
then 
    echo "Error" 
fi 
echo "done" 
Смежные вопросы