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

时间:2016-04-28 00:06:19

标签: linux bash if-statement while-loop conditional-operator

我希望你有一个美好的一天,并对标题感到抱歉,我不知道如何以一种每个人都能理解我坚持的方式来写它。

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

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

例如,如果我执行$ DIRECTORY_NAME,那将是这样的:

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

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

有人可以向我解释更多关于while条件吗?

1 个答案:

答案 0 :(得分:1)

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

1.使用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" ]。但要注意大括号之间的空格。

其余的很清楚,我希望。