2017-01-17 2 views
0

私は現在、bashで少しのスクリプトを書いてユーザに設定を尋ねています。スクリプトはいくつかの情報を求めていて、他のスクリプトを実行しています。私はスクリプトでapt-getをインストールしているので、sudoの下で実行する必要があります。sudoを使用したBASHスクリプト

しかし、私は、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 

は、どのように私はこの問題を解決することができますか?事前

+0

@cxw、ありがとう、私の問題を解決します。私はまったくこれを考えなかった、私はどれほど愚かなのだろうか? ahah – Nathan30

+0

@ JohnKugelmanそして、やや無効なbashコードを作成する方法は、多くの微妙な方法があります。ちょうど1つの例です:あるbashの達人は、あなたが '$ {variable}'のために常に行くと言っていて、いつも常に常に[["の代わりに[['私の目では、bashは**間違ったことをするための**超簡単**を可能にする言語の1つです。遅くまで(あまりにも)気づくことさえありません。 – GhostCat

+1

sudoの下でスクリプト全体を実行する必要はありません。昇格された特権を必要とする特定のコマンドについては、スクリプト内からsudoを起動するだけです。 –

答えて

2

スクリプトの冒頭を見せていると仮定で

おかげで、私はそれはおそらく通常のshの下で実行していると思います。 sh言語はfunctionキーワード(reference)をサポートしていません。それはbashの下で実行されるようにあなたは、あなたのスクリプトの最初の行として

#!/bin/bash 

を追加する場合は、[OK]をする必要があります。

また、functionという単語をスクリプトの最初の行から削除することもできます。ただし、bashの機能を利用できるように、#!を追加することをおすすめします。


はテストとして、私はCygwinの上( bashの拡張機能の一部をサポートしていません) dashを使用してみました。

function foo() { 

は私に対応するエラーましたライン:

dash: 1: Syntax error: "(" unexpected 

しかし

foo() { 

がうまく働きました。

+0

ありがとう、実際には私は#!/ bin/bash行を忘れてしまった... – Nathan30

+0

@ Nathan30それを聞いてうれしい!我々はすべてそこにいた:)。 – cxw

関連する問題