Fungsi Ubuntu bash..syntax error: "(" atau "}" tidak terduga

9

Mencoba menjalankan beberapa fungsi bash, tetapi tetap menemukan kesalahan sintaks: "(" tidak terduga. Saya sudah mencoba menghapus tanda kurung, tanda kurung dll dll ... sepertinya tidak ada yang berhasil.

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

#!/bin/bash
function hello () {
echo "Hello world"
}
James A
sumber
Bagaimana Anda menjalankan skrip?
muru
Dengan izin penuh. sh hello.sh
James A
1
lihat ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind
Saya membaca tutorialnya tadi malam dan mengikuti mereka untuk melihat di mana saya salah ... tapi saya masih mendapatkan kesalahan sintaks yang sangat membingungkan. Bukankah seharusnya shebang setidaknya membuat fungsi tersebut kompatibel bahkan jika Ubuntu menjalankan shell yang berbeda?
James A
Masalah terpecahkan. Saya menggunakan $ sh hello.sh ---> Saya mendapatkan kesalahan. Saya seharusnya menggunakan ./hello.sh untuk menjalankannya dengan benar. Saya rasa shebang sudah selesai ditulis dan dash dasbor default digunakan?
James A

Jawaban:

18

Jika Anda menjalankan skrip dengan sh hello.sh, shell penafsiran tidak akan menjadi yang disebutkan di baris shebang, tetapi /bin/shakan digunakan. Dalam hal Debian dan Ubuntu secara default, ini akan menjadi dash.

Jadi untuk menjalankan skrip Anda dengan benar bash, gunakan salah satu dari yang berikut ini.

/bin/bash hello.sh

atau

chmod +x hello.sh
./hello.sh

Atau Anda juga dapat menetapkan bashsebagai /bin/sh.

dpkg-reconfigure dash 
Thomas
sumber
Terima kasih atas tanggapannya. Tidak tahu mengapa itu turun sebagai: /
James A
2

Pertama:

Kesalahan sintaksis adalah karena (). Hapus () dari file seperti ini:

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

atau Anda bisa menjalankan perintah berikut untuk mengedit file untuk Anda:

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

Anda sekarang dapat menjalankan file dengan hasil yang diinginkan.


Atau :

Anda dapat menambahkan baris 2, 3, dan 4 ke ~/.bashrcfile Anda .

function hello () {
echo "Hello world"
}

Ingat, jangan gunakan sudountuk mengedit ~/.bashrcfile Anda !

Setelah Anda menambahkan baris ke file, jalankan perintah berikut untuk memulai ulang bash atau "sumber" file .bashrc Anda:

. ~/.bashrc

Anda sekarang harus dapat menjalankan perintah hellodan "Hello world" harus mencetak di terminal.


Juga:

Anda dapat mengedit file untuk mengatakan ini sebagai gantinya:

#!/bin/bash
echo "Hello world"

dan beri nama file tersebut hellodan simpan file tersebut ke /usr/local/bin.

Setelah melakukan semua itu, buat file dapat dieksekusi dengan menjalankan perintah berikut:

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

Anda sekarang harus dapat menjalankan perintah hellodan "Hello world" harus mencetak di terminal.


Akhirnya:

Opsi ketiga adalah menambahkan baris berikut ke ~/.bashrcfile Anda :

alias hello='echo "Hello world"'

Kemudian, sumber file .bashrc Anda menggunakan perintah berikut:

. ~/.bashrc 
mchid
sumber
Terima kasih atas tanggapan Anda .... Saya sudah mencoba beberapa dan menemukan jawabannya cukup sederhana. Alih-alih menggunakan $ sh hello.sh ... ./hello.sh berfungsi dengan baik. Pasti shebang telah selesai ditulis ^^
James A
Mengapa jawaban Thomas ditolak, tetapi? Apakah dia tidak benar?
James A
2

GNU Bash adalah shell yang digunakan secara default di terminal di Ubuntu. Namun ketika skrip dieksekusi pada boot sistem maka dash digunakan, karena itu adalah dash yang adalah / bin / sh.

Tidak akan bekerja ->

$ sh hello.sh

Akan bekerja ->

$./hello.sh

Masalah terpecahkan

James A
sumber
1

Menurut Skrip Anda:

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

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
Benny
sumber