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

时间:2013-09-02 02:41:43

标签: 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 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    

发生了什么事?

3 个答案:

答案 0 :(得分:3)

如果您要使用&终止命令将其置于后台,请不要使用其他分号;终止该命令:

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

以前

2>&1&;

答案 1 :(得分:0)

我猜您在&

中有额外的2>&1&

将其更改为2>&1

答案 2 :(得分:0)

检查以下脚本

#!/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;;