BASH : 在目录 Y 中查找 fileX[1-20] 并查看 fileX[1-20].pid 是否存在

BASH : find fileX[1-20] in directory Y and look if fileX[1-20].pid exist

希望您今天过得愉快,对于标题感到抱歉,我不知道如何以一种每个人都能理解我所坚持的方式来写它。

到目前为止,我已经制作了这段代码(bash/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 的范围从 1 到 9)是否有关联的 PID 文件。如果没有,开始 $PROGRAM_NAME[X].

所以要这样做,我想我必须像 Y 次一样循环(其中 Y 是 DIRECTORY_NAME 中 $PROGRAM_NAME[X] 的数量)并一一检查...

例如,如果我执行 ls $DIRECTORY_NAME,就会像这样:

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

所以我想启动 prog 3 而不是创建 prog5,因为并非所有元素都有现有的 pid 文件。

有人可以向我解释一下 while 条件吗?

假设你有一个相对现代的bash,我建议如下:

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.To 检查文件是否存在使用 test -f <filename>。在 pid 文件的情况下,它看起来像:

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

test <condition> 等于众所周知的 [ <condition> ] 所以 test -f "$PIDFILE" 可以用 [ -f "$PIDFILE" ] 代替。不过要注意大括号之间的空格。

我希望剩下的已经很清楚了。