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" ]
代替。不过要注意大括号之间的空格。
我希望剩下的已经很清楚了。
希望您今天过得愉快,对于标题感到抱歉,我不知道如何以一种每个人都能理解我所坚持的方式来写它。
到目前为止,我已经制作了这段代码(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" ]
代替。不过要注意大括号之间的空格。
我希望剩下的已经很清楚了。