linux - 带 sudo 的 BASH 脚本

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

我该如何解决这个问题?

提前致谢

最佳答案

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

#!/bin/bash

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

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


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

function foo() {

给我相应的错误:

dash: 1: Syntax error: "(" unexpected

但是

foo() {

工作正常。

关于linux - 带 sudo 的 BASH 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41699156/

相关文章:

regex - + 正则表达式在 sed 中不起作用

python - 获取家庭路由器上的客户端 MAC 地址列表

Linux 串行端口通信超时 - VirtualBox 直通

Python 的 subprocess.Popen() 结果与命令行不同?

linux - 从根 bash 脚本以非根身份运行文件

linux - unixODBC/Postgres密码神秘登录错误

html - 在浏览器中呈现终端输出

Bash:计算脚本运行需要多长时间

linux - 如何在Linux服务器上不使用sudo安装git

linux - bash:使用 sudo 权限打开文件描述符