उबंटू बैश फ़ंक्शंस..साइनटैक्स त्रुटि: "(" या "}" अप्रत्याशित


9

कुछ बैश फ़ंक्शंस चलाने की कोशिश कर रहे हैं, लेकिन सिंटैक्स त्रुटि का सामना कर रहे हैं: "(" अप्रत्याशित। मैंने ब्रैकेट, कोष्ठक आदि आदि को हटाने की कोशिश की है ... कुछ भी काम नहीं लगता है)।

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

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

आप स्क्रिप्ट कैसे चला रहे हैं?
मुरु

पूरी अनुमति के साथ। sh hello.sh
जेम्स ए

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

मैंने कल रात उनके ट्यूटोरियल पढ़े और उनके बाद यह देखने के लिए कि मैं कहाँ गलत हो रहा था ... लेकिन मुझे अभी भी एक सिंटैक्स त्रुटि मिलती है जो बहुत भ्रामक है। यदि उबंटू एक अलग शेल चला रहा हो तो भी कम से कम शेबंग को फ़ंक्शन को संगत नहीं बनाना चाहिए?
जेम्स ए

समस्या सुलझ गयी। मैं $ श हैलो का उपयोग कर रहा था। शश ---> मुझे त्रुटि मिलती है। मैं का उपयोग करना चाहिए था। /hello.sh इसे सही ढंग से चलाने के लिए। मुझे लगता है कि शेबंग लिखा हुआ हो जाता है और डिफ़ॉल्ट डैश शेल का उपयोग किया जाता है?
जेम्स ए

जवाबों:


18

यदि आप स्क्रिप्ट को चला रहे हैं sh hello.sh, तो इंटरप्रेटिंग शेल शेलबैंग लाइन में उल्लिखित नहीं होगा, लेकिन /bin/shइसका उपयोग किया जाएगा। डिफ़ॉल्ट रूप से डेबियन और उबंटू के मामले में यह होगा dash

तो अपनी स्क्रिप्ट को सही तरीके से चलाने bashके लिए, निम्न में से किसी एक का उपयोग करें।

/bin/bash hello.sh

या

chmod +x hello.sh
./hello.sh

वैकल्पिक रूप से आप भी के bashरूप में सेट कर सकते हैं /bin/sh

dpkg-reconfigure dash 

प्रतिक्रिया के लिए धन्यवाद। कोई विचार नहीं कि यह मतदान क्यों हुआ: /
जेम्स ए

2

प्रथम:

सिंटैक्स त्रुटि के कारण () है। फ़ाइल को इस तरह से निकालें ():

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

या आप केवल आपके लिए फ़ाइल संपादित करने के लिए निम्न कमांड चला सकते हैं:

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

अब आपको वांछित परिणाम के साथ फ़ाइल चलाने में सक्षम होना चाहिए।


वैकल्पिक रूप से :

आप अपनी ~/.bashrcफ़ाइल में लाइनें 2, 3 और 4 जोड़ सकते हैं ।

function hello () {
echo "Hello world"
}

याद रखें, अपनी फ़ाइल को संपादित करने के लिए उपयोग करें !sudo~/.bashrc

जब आप फ़ाइल में लाइनें जोड़ते हैं, तो bash या "source" को अपनी .bashrc फ़ाइल को पुनरारंभ करने के लिए निम्न कमांड चलाएँ:

. ~/.bashrc

अब आपको कॉमन को चलाने में सक्षम होना चाहिए helloऔर "हैलो वर्ल्ड" को टर्मिनल में प्रिंट करना चाहिए।


इसके अलावा:

आप इसके बजाय यह कहने के लिए फ़ाइल को संपादित कर सकते हैं:

#!/bin/bash
echo "Hello world"

और फ़ाइल का नाम और फ़ाइल helloको बचाने के लिए /usr/local/bin

वह सब करने के बाद, निम्नलिखित कमांड को चलाकर फाइल को निष्पादन योग्य बनाएं:

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

अब आपको कॉमन को चलाने में सक्षम होना चाहिए helloऔर "हैलो वर्ल्ड" को टर्मिनल में प्रिंट करना चाहिए।


आखिरकार:

एक तीसरा विकल्प यह होगा कि आप अपनी ~/.bashrcफ़ाइल में निम्न पंक्ति जोड़ें :

alias hello='echo "Hello world"'

उसके बाद, अपने .bashrc फ़ाइल को निम्न कमांड का उपयोग करके स्रोत:

. ~/.bashrc 

आप प्रतिक्रियाओं के लिए धन्यवाद .... मैंने कुछ कोशिश की है और जवाब काफी सरल मिला है। इसके बजाय $ sh hello.sh का उपयोग करें ... ./lolo.sh ठीक काम करता है। यह लिखा होना चाहिए, पर लिखा है ^ ^
जेम्स A

थॉमस के जवाब को वोट क्यों दिया गया लेकिन क्या वह सही नहीं था?
जेम्स ए

2

GNU बैश उबंटू में टर्मिनलों में डिफ़ॉल्ट रूप से उपयोग किया जाने वाला खोल है। हालाँकि जब सिस्टम बूट पर स्क्रिप्ट निष्पादित की जाती है तब डैश का उपयोग किया जाता है, क्योंकि यह डैश है जो कि / 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.