2016-04-28 2 views
0

Надеюсь, у вас отличный день и жаль, что я не знал, как писать это было так, что все могли понять, за что я застрял.BASH: найдите fileX [1-20] в каталоге Y и посмотрите, если fileX [1-20] .pid существует

До сих пор я сделал этот код (Баш/Linux):

RESEARCH=`find $DIRECTORY_NAME -type f -name "$PROGRAM_NAME[1-9]" -perm -ugo=x` 
    while [ #That's where I'm stuck (see below for explanation) ] 
    do 
     if [ #$PROGRAM_NAME[X] don't have an existing pid file ($PROGRAM_NAME[X].pid) ] 
     then 
      echo "Starting $PROGRAM_NAME[X]..." 
      ./$PROGRAM_NAME[X] 
      echo "$PROGRAM_NAME[x] started successfully!" 

     else 
      if [ #Number of $PROGRAM_NAME < 9] 
      then 
       echo "Compilation of $NEW_PROGRAM[X]..." 
       gcc -Wall tp3.c -o $DIRECTORY_NAME/$NEW_PROGRAM[X] 
       echo "$NEW_PROGRAM[X] compiled with success!" 
       echo 
       echo "Starting $NEW_PROGRAM..." 
       ./$NEW_PROGRAM[X] 
       echo "$NEW_PROGRAM[X] started successfully!" 

      else 
       echo "The number of process running is at its limit." 
      fi 
     fi 
    done 

Я думаю, что это легко, но я не знаю, как это сделать ... Что я хочу, чтобы проверить, каждый $ PROGRAM_NAME [X] (где X CAN варьируется от 1 до 9) имеет связанный файл PID. Если нет, запустите $ PROGRAM_NAME [X].

Так, чтобы сделать это, я думаю, что я должен иметь прогиб, как Y время (где Y представляет собой число $ program_name [X] в directory_name) и проверить их один за другим ...

Для Exemple, если я сделать LS $ directory_name, это было бы так:

prog1 
    prog1.pid 
    prog2 
    prog2.pid 
    prog3 
    prog4 
    prog4.pid 

Так что я хотел бы начать проги 3, а не создавать prog5, так как не все элемента есть существующий файл PID.

Может ли кто-нибудь объяснить мне больше о состоянии времени?

ответ

1

Предполагая, что у вас есть относительно современный Баш, я хотел бы предложить следующее:

1.Use for((...)) цикл вместо while:

MAX_PROGRAM_NUM=9 
for((i=1; i<$MAX_PROGRAM_NUM; i++)); do 
    echo "Checking program #$i" 
    PROGNAME="prog$i" 
    PIDFILE="${PROGNAME}.pid" 
    ... 
done 

2.Для проверки существования в виде использования файла test -f <filename>. В случае PID-файл это будет выглядеть так:

if test -f "$PIDFILE"; then 
    ... 
else 
    ... 
fi 

test <condition> равно хорошо известный [ <condition> ] так test -f "$PIDFILE" можно заменить [ -f "$PIDFILE" ]. Однако будьте осторожны с пробелами между фигурными скобками.

Остальное довольно ясно, надеюсь.

+0

Спасибо, это работает! –