繁体   English   中英

带有sudo的BASH脚本

[英]BASH script with 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

如何解决此问题?

提前致谢

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

#!/bin/bash

作为脚本的第一行,使其在bash下运行,您应该可以。

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


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

function foo() {

给了我相应的错误:

dash: 1: Syntax error: "(" unexpected

foo() {

工作正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM