Ubuntu bash fonksiyonları..syntax hatası: “(” veya “}” beklenmedik


9

Bazı bash işlevlerini çalıştırmaya çalışıyorum, ancak sözdizimi hatasıyla karşılaşmaya devam edin: "(" beklenmedik. Parantezleri, parantezleri vb. Kaldırmayı denedim ... hiçbir şey işe yaramıyor.

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

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

Senaryoyu nasıl çalıştırıyorsunuz?
muru

Tam izinlerle. sh hello.sh
James A

1
bkz. ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind

Dün gece eğitimlerini okudum ve nerede yanlış yaptığımı görmek için onları takip ettim ... ama yine de çok kafa karıştırıcı bir sözdizimi hatası alıyorum. Ubuntu farklı bir kabuk çalıştırıyor olsa bile, shebang en azından işlevi uyumlu hale getirmemeli mi?
James A

Sorun çözüldü. $ Sh hello.sh kullanıyordum ---> Hata alıyorum. Ben doğru çalıştırmak için ./hello.sh kullanmalıydım. Ben shebang tahmin üzerine yazılmış ve varsayılan çizgi kabuk kullanılan sanırım?
James A

Yanıtlar:


18

Senaryoyu çalıştırıyorsanız, sh hello.shyorumlama kabuğu shebang satırında belirtilen değil /bin/sh, kullanılacak. Debian ve Ubuntu varsayılan olarak bu olacaktır dash.

Komut dosyanızı bir ile doğru şekilde çalıştırmak için bashaşağıdakilerden birini kullanın.

/bin/bash hello.sh

veya

chmod +x hello.sh
./hello.sh

Alternatif basholarak /bin/sh.

dpkg-reconfigure dash 

Yanıtınız için teşekkür
James A

2

İlk:

Sözdizimi hatası () nedeniyle. () Dosyasını şu şekilde kaldırın:

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

ya da dosyayı sizin için düzenlemek için aşağıdaki komutu çalıştırabilirsiniz:

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

Artık dosyayı istenen sonuçla çalıştırabilmelisiniz.


Alternatif olarak :

~/.bashrcDosyanıza 2, 3 ve 4 satırları ekleyebilirsiniz .

function hello () {
echo "Hello world"
}

Unutmayın, yok kullanmak sudoiçin düzenlemek için ~/.bashrcdosyayı!

Dosyaya satır ekledikten sonra, bash'ı yeniden başlatmak veya .bashrc dosyanızı "kaynaklamak" için aşağıdaki komutu çalıştırın:

. ~/.bashrc

Artık comand'ı çalıştırabilmeniz hellove "Merhaba dünya" terminalde yazabilmeniz gerekir.


Ayrıca:

Bunun yerine dosyayı düzenlemek için düzenleyebilirsiniz:

#!/bin/bash
echo "Hello world"

ve dosyayı adlandırın hellove kaydedin /usr/local/bin.

Tüm bunları yaptıktan sonra, aşağıdaki komutu çalıştırarak dosyayı yürütülebilir yapın:

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

Artık comand'ı çalıştırabilmeniz hellove "Merhaba dünya" terminalde yazabilmeniz gerekir.


En sonunda:

Üçüncü seçenek, ~/.bashrcdosyanıza aşağıdaki satırı eklemek olacaktır :

alias hello='echo "Hello world"'

Ardından, aşağıdaki komutu kullanarak .bashrc dosyanızı kaynaklayın:

. ~/.bashrc 

Size cevaplar için teşekkür ederim .... Birkaç denedim ve cevap yeterince basit buldum. $ Sh kullanmak yerine hello.sh ... ./hello.sh işe yarıyor.Şişkinin üzerinde yazılı olması gerekir ^^
James A

Thomas'ın cevabı neden oylandı ama? Doğru değil miydi?
James A

2

GNU Bash, Ubuntu'daki terminallerde varsayılan olarak kullanılan kabuktur. Ancak komut dosyaları sistem önyüklemesinde yürütüldüğünde / bin / sh olan tire olduğu için tire kullanılır.

Çalışmaz ->

$ sh hello.sh

Çalışacak ->

$./hello.sh

Sorun çözüldü


1

Senaryonuza göre:

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

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.