Ubuntu bash functions..syntaxエラー:「(」または「}」が予期しない


9

一部のbash関数を実行しようとしていますが、構文エラーが発生し続けます: "("予期しない。角かっこ、かっこなどを削除しようとしましたが、何も機能しないようです。

$ bash --version
GNU bash, version 4.3.46(1) release

#!/bin/bash
function hello () {
echo "Hello world"
}

スクリプトをどのように実行していますか?
muru、

完全な権限を持ちます。sh hello.sh
James A

1
ryanstutorials.net/bash-scripting-tutorial/bash-functaions.phpを参照してください
Rinzwind

私は昨夜彼のチュートリアルを読んで、どこが間違っているのかを確認するためにそれらを追跡しましたが、それでも非常に混乱する構文エラーが発生します。Ubuntuが別のシェルを実行している場合でも、シバンは少なくとも関数に互換性を持たせるべきではありませんか?
James A

問題が解決しました。$ sh hello.shを使用していた--->エラーが発生する。私はそれを正しく実行するために./hello.shを使用する必要がありました。
James A

回答:


18

でスクリプトを実行している場合sh hello.sh、解釈シェルはシバン行で言及されたものではなく、/bin/sh使用されます。DebianおよびUbuntuの場合、デフォルトではになりますdash

したがってbash、を使用してスクリプトを正しく実行するには、次のいずれかを使用します。

/bin/bash hello.sh

または

chmod +x hello.sh
./hello.sh

またはbash、として設定することもできます/bin/sh

dpkg-reconfigure dash 

回答いただきありがとうございます。なぜ不承認となったのかわかりません:/
James A

2

最初:

構文エラーは()が原因です。次のようにファイルから()を削除します。

#!/bin/bash
function hello {
echo "Hello world"
}

または、次のコマンドを実行してファイルを編集することもできます。

sed -i 's/() //g' hello.sh

これで、ファイルを実行して目的の結果を得ることができるはずです。


または

2、3、4行目を~/.bashrcファイルに追加できます。

function hello () {
echo "Hello world"
}

覚えている、していない使用sudoあなたの編集し~/.bashrcたファイルを!

ファイルに行を追加したら、次のコマンドを実行してbashを再起動するか、.bashrcファイルを「ソース」します。

. ~/.bashrc

これでコマンドを実行できるようにhelloなり、「Hello world」がターミナルに出力されます。


また:

代わりにファイルを編集して、次のように言うことができます。

#!/bin/bash
echo "Hello world"

ファイルに名前を付け、ファイルhelloをに保存します/usr/local/bin

これらすべてを実行したら、次のコマンドを実行してファイルを実行可能にします。

sudo chmod +x /usr/local/bin/hello

これでコマンドを実行できるようにhelloなり、「Hello world」がターミナルに出力されます。


最終的に:

3番目のオプションは、次の行を~/.bashrcファイルに追加することです。

alias hello='echo "Hello world"'

次に、次のコマンドを使用して.bashrcファイルを入手します。

. ~/.bashrc 

回答ありがとうございます...数回試してみましたが、答えは簡単です。$ shを使用する代わりにhello.sh ... ./hello.shは正常に機能します。シバンは上書きされたはずです^^
James A

トーマスの回答が反対票だったのはなぜですか?彼は正しくなかったのですか?
James A

2

GNU Bashは、Ubuntuのターミナルでデフォルトで使用されるシェルです。ただし、システムの起動時にスクリプトが実行されると、ダッシュが使用されます。ダッシュは/ bin / shであるためです。

うまくいきません->

$ sh hello.sh

動作します->

$./hello.sh

問題が解決しました


1

あなたのスクリプトによると:

#!/bin/bash
function hello () {
    echo "Hello world"
}

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.