2013-09-05 2 views
0

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

#!/bin/csh 
if [[ $# != 1 || $1 != "first" && $1 != "second" ]] 
then 
    echo "Error: Usage: $0 [first|second]" 
    exit 1 
fi 

, но я получаю сообщение об ошибке:

если: Синтаксис выражений.

Я понятия не имею, что случилось с этим синтаксисом. Мне это хорошо. пожалуйста помоги.

ответ

1

: C оболочки (CSH) не имеет переменную $#. На самом деле, в csh аргументы, передаваемые, if и т. Д., Принципиально отличаются, например, ksh или bash. Весь ваш код выглядит как код bash, но ваша строка shebang содержит csh. Так что если вы хотите использовать bash затем изменить его на:

#!/bin/bash 
if [[ $# != 1 || $1 != "first" && $1 != "second" ]] 
then 
    echo "Error: Usage: $0 [first|second]" 
    exit 1 
fi 

Или, если вы действительно хотите использовать csh то вы повторно написать код:

#!/bin/csh 
if ($#argv != 1 || $1 != "first" && $1 != "second") then 
    echo "Error: Usage: $0 [first|second]" 
    exit 1 
endif 
0

Если вы используете C-оболочки, вы должны написать

#!/bin/csh 
if($# != 1 || $1 != "first" && $1 != "second") then 
    echo "Error: Usage: $0 [first|second]" 
    exit 1 
endif 

Ваша версия работает для Bourne-подобных оболочек, как sh, bash и т.д.

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