BASH脚本与sudo

时间:2017-01-17 14:02:41

标签: linux bash sudo

我正在用bash写一个小脚本来询问用户一些设置。该脚本正在询问一些信息,然后运行其他脚本。我必须在sudo下运行它,因为我在脚本中有一些apt-get安装。

但是当我用sudo启动它时,我有这个错误:

./install_all: 1: ./install_all: Syntax error: "(" unexpected

这是我的脚本的开头:

function askAllInfo() {
    echo -e "
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
    |     Choix de la version de PHP     | 
    |                                    |
    |              1.) PHP5              |
    |              2.) PHP7              |
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"

    read -e -p "Selectionner la version PHP pour l'installation de Maarch (PHP5) : " phpVERSION
    if [ "$phpVERSION" == "1" ] || [ "$phpVERSION" == "" ]; then
        phpVersion='5'
    elif [ "$phpVERSION" == "2" ]; then
        phpVersion='7'
    fi

    echo -e "
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
    |    Choix du chemin d'installation de MAARCH :    |
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"
    read -e -p "Merci de spécifier le chemin pour l'installation de Maarch (/var/www/maarch_courrier) : " maarchURL
    if [ "$maarchURL" == "" ]; then
        MAARCH_SITE=/var/www/maarch_courrier
    else
        MAARCH_SITE=$maarchURL
    fi

    echo -e "
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
    |    Choix du chemin des docservers :    |
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"
    read -e -p "Merci de spécifier le chemin des docservers (/var/docserver) : " docserversURL
    if [ "$docserversURL" == "" ]; then
        DOCSERVER_PATH=/var/docserver
    else
        DOCSERVER_PATH=$docserversURL
    fi

    echo -e "
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
    |        Choix du nom de la BDD :        |
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"
    read -e -p "Merci de spécifier le nom de la base de donnée (maarch) : " databaseName
    if [ "$databaseName" == "" ]; then
        DATABASE_NAME=maarch
    else
        DATABASE_NAME=$databaseName
    fi

    echo -e "
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
    |        Choix du login de l'utilisateur de la BDD :        |
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"
    read -e -p "Merci de spécifier le login de l'utilisateur de la base de donnée (postgres) : " databaseUser
    if [ "$databaseUser" == "" ]; then
        DATABASE_USER=postgres
    else
        DATABASE_USER=$databaseUser
    fi

    echo -e "
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
    |          Choix du mdp de l'utilisateur de la BDD :        |
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#\n"
    read -e -p "Merci de spécifier le mot de passe de l'utilisateur de la base de donnée (postgres) : " databasePass
    if [ "$databasePass" == "" ]; then
        DATABASE_PASSWORD=postgres
    else
        DATABASE_USER=$databasePass
    fi
}

askAllInfo

如何解决此问题?

提前致谢

1 个答案:

答案 0 :(得分:2)

假设您正在显示脚本的开头,我认为它可能在常规sh下运行。 sh语言不支持function关键字(reference)。如果你添加

#!/bin/bash

作为脚本的第一行,以便它在bash下运行,你应该没问题。

或者,您可以从脚本的第一行删除单词function。但是,最好添加#!,以便您可以使用bash功能。

作为测试,我尝试在Cygwin上使用dash(不支持某些bash扩展名)。这条线

function foo() {

给了我相应的错误:

dash: 1: Syntax error: "(" unexpected

foo() {

工作正常。