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

在脚本中使用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 

发生什么事?

如果你打算用&来终止你的命令,那么不要用另一个分号结尾; 以及:

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

先前

 2>&1&; 

我想你有一个额外的2>&1&

将其更改为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 AZ az` 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;;