2013-09-10 3 views
0

Я получаю ошибки при запуске этого сценария bash. Я проверил во всех руководствах, это выглядит хорошо для меня?формат сценария bash

Помогите оценить.

#!/bin/sh 
    HOME=/var/www 
    sleep 20 
    echo 'running' > $HOME/script-1-output.txt 
    if (-f $HOME/script-2-output.txt) 
    echo 'script-2 has run' >> $HOME/script-1-output.txt 
    else 
    echo 'script-2 has not run' >> $HOME/script-1-output.txt 
    fi 
    if (-f $HOME/script-3-output.txt) 
    echo 'script-3 has run' >> $HOME/script-1-output.txt 
    else 
    echo 'script-3 has not run' >> $HOME/script-1-output.txt 
    fi 
+2

Какие ошибки? Где? EDIT: Я считаю, что вам нужно 'if [-f $ HOME/script-2-output.txt]', то же самое с другим 'if' - отметить квадратные скобки и пробелы. Тем не менее, в следующий раз не забудьте включить всю необходимую информацию. – Amadan

ответ

2

В bash, если условия обернуты между [] not(). Всегда должно быть пространство между условием и квадратными скобками. И вам тогда понадобится синтаксис if-then-else-fi.

if [ -f file.txt ]; then 
    echo "yes" 
else 
    echo "no" 
fi 
+0

Не могу поверить, что я пропустил что-то настолько очевидное, спасибо. –

+4

На самом деле '' '' и '' 'являются специальным синтаксисом для команды' test', поэтому '[-f file.txt]' эквивалентно 'test -f file.txt'. Правильнее сказать, что в bash вы не используете никаких фигурных скобок вокруг условия выражения 'if'. 'if test -f file.txt; то ... "одинаково корректно. – augurar

+0

Правильнее сказать, что в bash вы используете '' [[]] '' вокруг условных выражений. '' if [[-f file.txt]]; then'' –

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