我正在使用bash脚本来查看给定的进程是否正在运行。如果它们没有运行,则显示进程$ p没有运行。但是,如果所有进程都在运行,我希望它打印一次:“进程正在运行”。
但是问题是它多次打印出“正在运行的进程”,并且即使有未运行的进程也被打印出。我认为For循环出了点问题。
#!/bin/bash
check_process=( "ssh" "mysql" "python" )
for p in "${check_process[@]}"; do
if ! pgrep -x "$p" > /dev/null; then
echo "Process \`$p' is not running"
else
echo "Processes are running"
fi
done
答案 0 :(得分:2)
基本上,您想实现逻辑AND条件。您可以执行以下操作:
#!/bin/bash
check_process=( "ssh" "mysql" "python" )
allrunning=1
for p in "${check_process[@]}"; do
if ! pgrep -x "$p" > /dev/null; then
echo "Process \`$p' is not running"
allrunning=0
fi
done
if [ $allrunning -eq 1 ]
then
echo "Processes are running"
fi