无法在不执行不需要的命令的情况下退出Bash脚本

时间:2016-06-01 16:47:29

标签: bash

我编写了一个有效的bash脚本,除非你告诉它不要结束这个过程。我一直在撞墙,试图让这个脚本退出0而不执行任何其他命令。

 #!/bin/bash

    createProcfile() {

    ps -eLf | grep -f process.tmp | grep -v 'grep' | awk '{print $2,$10}' | sort -u | egrep -o '[0-9]{4,}' > pid.tmp

    }

 #  PIDproc=$(createProcfile)
    PIDFile=pid.tmp

    echo "Enter a process name"
    read process
    echo $process > process.tmp

    node_process_id=$(pidof $process)
    if [[ -z $node_process_id ]]; then
            echo "Please enter a valid process."
        rm process.tmp
        exit 0
    fi

    ps -eLf | grep $process | awk '{print $2,$10}' | sort -u | grep -v 'grep'
    echo "Would you like to kill this process(es)? (y/n)"
    read $answer

    if [[ $answer == n ]]; then
        exit 0
    else
        createProcfile
        kill -SIGKILL $(<"$PIDFile")
        rm $PIDFile
        createProcfile

        node_process_id=$(pidof $process)
        if [[ -z $node_process_id ]]; then
                echo "Process terminated successfully."
            rm process.tmp
            exit 0
        else
            echo "Process not terminated. Kill process manually."
            ps -eLf | grep $process | awk '{print $2,$10}' | sort -u | grep -v 'grep'
            rm $PIDFile
            rm process.tmp
            exit 0
        fi
    fi

如果我输入n,我需要退出而不执行命令。现在,无论如何它都会杀死这个过程。

3 个答案:

答案 0 :(得分:2)

read将变量的名称作为参数:

read answer

你写的是语法正确的; bash会扩展answer的当前值,以获取read将设置的变量的名称。最有可能的是,answer还没有值,因此命令会缩减为read,不带参数,在这种情况下read会设置参数REPLY的值。

请注意,如果您遵循引用所有参数扩展的良好做法,则可能已编写read "$answer",其扩展为read "",这会产生错误,指示{{1} }}不是有效的标识符。

答案 1 :(得分:0)

您分配的答案错误

read $answer

应该是

read answer

答案 2 :(得分:-1)

我修好了!

我改变了:

if [[ $answer == n ]]

为:

if [[ $answer -eq "n" ]]

并且,它有效!

是的,在回答了我自己的问题之后,我发现还有很多工作要做,所以......