ошибка сценария оболочки - PullRequest
0 голосов
/ 11 марта 2011

У меня есть такой скрипт оболочки.

line="$@" # get the complete first line which is the complete script path 
name_of_file = ${line%.*}
file_extension = ${line##*.}
if [ $file_extension == "php"]
then
ps aux | grep -v grep | grep -q "$line" || ( nohup php -f "$line" > /var/log/iphorex/$name_of_file.log & ) 
fi
if [ $file_extension == "java"]
then
ps aux | grep -v grep | grep -q "$line" || ( nohup java -f "$name_of_file" > /var/log/iphorex/$name_of_file.log & )
fi

здесь строковая переменная имеет значения типа /var/www/dir/myphp.php или /var/www/dir/myjava.java.

Цель сценария оболочки состоит в том, чтобыпроверьте, запущены ли эти процессы уже , а если нет, я пытаюсь их запустить. Я получаю следующие ошибки.

name_of_file: command not found
file_extension: command not found
[: missing `]'
[: missing `]' 

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

Во-первых, процессор оболочки обрабатывает строку:

name_of_file = ${line%.*}

как выполнение команды:

name_of_file

с параметрами:

= ${line%.*}

вам нужно написать это как:

name_of_file=${line%.*}

Это превращает его в переменную = значение. Вы должны повторить это и для строки file_extension =.

Во-вторых, если:

if [ $file_extension == "php"]
У

точно такая же проблема с синтаксическим анализом, у вас должен быть пробел перед завершающим символом], потому что в противном случае парсер считает, что вы проверяете, равна ли $ file_extension строке: "php]"

if [ $file_extension == "php" ]
1 голос
/ 11 марта 2011

другие ответы правы в том, что проблема в вашем скрипте заключается в пустых местах в ваших переменных присваиваниях и [ .. ] операторах.

(не по теме. К вашему сведению)

Я взял на себя смелость рефакторинга вашего сценария (не проверено!), Просто чтобы выделить некоторые альтернативы, а именно:

  • с использованием pgrep вместо ps aux | grep .....
  • с использованием case

-

#!/bin/bash
line="$@" # get the complete first line which is the complete script path 
name_of_file=${line%.*}

pgrep "$line" > /dev/null && exit # exit if process running

case "${line##*.}" in # check file extension
    php)
        nohup php -f "$line" > /var/log/iphorex/$name_of_file.log &
        ;;
    java)
        nohup java -f "$name_of_file" > /var/log/iphorex/$name_of_file.log &
        ;;
esac
1 голос
/ 11 марта 2011

сначала удалите пробелы, может быть, это поможет ...

name_of_file=${line%.*}
file_extension=${line##*.}

EDIT
Попробуйте это:

if [ $file_extension="php" ]
..
if [ $file_extension="java" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...