gpt4 book ai didi

linux - 带 sudo 的 BASH 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:15 25 4
gpt4 key购买 nike

我目前正在用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com