使用sudo运行时Shell脚本语法错误?

时间:2016-02-22 09:25:58

标签: linux bash shell sudo

我写了一个小脚本。完成后,它将设置我需要的环境变量并为我启动一个Node服务器。我创建了脚本,以便我有一个命令行界面来在启动时更改环境变量而不必记住。

这就是我到目前为止......

if [ $1 = "d" ] || [ $1 = "default" ]
    then
        export PORT=80
        export ENV=development
        export ENDPOINT=development
    elif [ $# -eq 0 ]
        then
        printf "\n\n-------------------\n\nPort Options:\n[1] 80\n[2] 3000\n[3] Custom\n\n-------------------\n\n"
        read -p "Select Option: " PORT_OPTION
        if [ "$PORT_OPTION" -eq 1 ]
            then 
                REQUESTED_PORT=80
            elif [ "$PORT_OPTION" -eq 2 ]
                then
                    REQUESTED_PORT=3000
            elif [ "$PORT_OPTION" -eq 3 ]
                then
                    read -p "Enter Requested Port Number: " REQUESTED_PORT
            else
                echo "Invalid slection...exiting."
                exit
        fi
        if [ "$REQUESTED_PORT" -eq "$REQUESTED_PORT" 2> /dev/null ]
            then
                if [ "$REQUESTED_PORT" -lt 1024 ] && [ "$(id -u)" != "0" ]
                    then
                        echo "Must have Root authoritzation to use this port...exiting."
                        exit
                    else
                        if netstat -an | grep "$REQUESTED_PORT" > /dev/null
                            then
                                SERVICE_PIDS_STRING=`lsof -i tcp:$REQUESTED_PORT -t`
                                OLD_IFS="$IFS"
                                IFS='
                                '
                                SERVICE_PIDS=($SERVICE_PIDS_STRING)
                                IFS="$OLD_IFS"
                                printf 'Port is in use by the following service(s)...\n\n-------------------\n\nProcess : PID\n'
                                for PID in "${SERVICE_PIDS[@]}"
                                    do
                                        PROCESS_NAME=`ps -p $PID -o comm=`
                                        printf "$PROCESS_NAME : $PID\n"
                                    done
                                printf "\n-------------------\n\nPlease kill the procceses utilizing port $REQUESTED_PORT and run this script again...exiting."
                                exit
                            else
                                echo "NOTHING USING PORT"
                        fi
                fi
            else
                echo "Invalid port number...exiting."
                exit
        fi
    else
         echo "Invalid argument...exiting." 
         exit
fi

我已经搜索了一段时间,试图找到解决问题的方法。之前的第37行已从read -a SERVICE_PIDS <<< "${SERVICE_PIDS_STRING}"更改。一切都运作良好,第37行的两个版本都适用于我...除非我将脚本作为sudo运行。

这不会有问题,但系统会保护某些端口,因此有时我需要在脚本上使用sudo。

我使用sudo运行脚本时收到以下错误...

./Start.sh: 36: ./Start.sh: Syntax error: "(" unexpected (expecting "fi")

为什么使用sudo会破坏我的脚本,我该如何解决这个问题呢?

P.S。我更喜欢使用Shell脚本而不是Bash。 (我可能在这里说错了,但我的理解是,如果我使用纯Shell脚本,脚本可以从任何UNIX系统运行,我的伙伴使用Mac。)

0 个答案:

没有答案