我希望你有一个美好的一天,并对标题感到抱歉,我不知道如何以一种每个人都能理解我坚持的方式来写它。
到目前为止,我已经制作了这段代码(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条件吗?
答案 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" ]
。但要注意大括号之间的空格。
其余的很清楚,我希望。