Linux Bash脚本检查进程是否正在运行,并在必要时读取用户输入以启动

Linux Bash脚本检查进程是否正在运行,并在必要时读取用户输入以启动,linux,bash,shell,Linux,Bash,Shell,在脚本中使用nohup时出现问题。如果未使用nohup,脚本将正常工作 开始这个过程。运行时收到以下错误: ./iper.sh: line 16: syntax error near unexpected token `;' ./iper.sh: line 16: ` [Yy]*) nohup iperf -s > /dev/null 2>&1&; break;;' 以下是完整的脚本: #!/bin/bash echo "Checking to

在脚本中使用
nohup
时出现问题。如果未使用
nohup
,脚本将正常工作 开始这个过程。运行时收到以下错误:

./iper.sh: line 16: syntax error near unexpected token `;'
./iper.sh: line 16: `        [Yy]*) nohup iperf -s > /dev/null 2>&1&; break;;'
以下是完整的脚本:

#!/bin/bash
    echo "Checking to see if Iperf is running:"
sleep 2

ps cax | grep iperf > /dev/null
if [ $? -eq 0 ]; then
    echo "Iperf is running."
else
    echo "Iperf is not running." 
fi
sleep 2

while true; do
    read -p "Press Y to start Iperf or N to exit: " yn
    case $yn in
        [Yy]*) nohup iperf -s > /dev/null 2>&1&; break;;
        [Nn]*) exit;; 
    esac
done    

发生了什么事?

我想你在
2>&1&


将其更改为
2>&1

如果要使用
&
终止命令以将其置于后台,请不要使用另一个分号来终止命令
以及:

[Yy]*) nohup iperf -s > /dev/null 2>&1& break;;
以前

2>&1&;

检查下面的脚本

#!/bin/bash
    echo "Checking to see if Iperf is running:"
sleep 1

if  `pgrep iperf >/dev/null 2>&1`
then
    echo "iperf Running"
else
    echo "iperf not Running"
fi

sleep 1

while true; do
        echo "Do you wanna start Iperf (y/n)"
        read  -n 1 ch; p=`echo ${ch} | tr A-Z a-z`
        case $p in
                y)nohup iperf -s > /dev/null 2>&1 break;;

                n)exit;;

                *)continue;
    esac
done
执行此命令后,它将等待用户按*ctrl+c*键出来

如果使用2>&1&(用于在没有用户干扰的情况下继续),则允许用户执行其他工作

在y)状态下更换下一行

nohup iperf -s > /dev/null 2>&1& break;;

脚本没有完成,如果我不使用nohup,脚本将运行。我的目标是启动Iperf,但让它在后台运行,并在我注销时继续运行。我很好奇为什么你编辑我的帖子而不先发表评论?我相信我清楚地解释了正在发生的事情。谢谢。额外的&is-so控件c是不需要的,我不想使用任何额外的输入。如果我不使用额外的&off,脚本将启动Iperf,但脚本没有完成以允许用户在shell上输入。谢谢你的意见,非常感谢!它现在如我所希望的那样工作。我应该已经抓住了,因为错误消息直接解释了问题。不幸的是,我还没有足够的声誉,所以我不能投票支持你的答案。