Bash ट्यूटोरियल
बैश से शुरुआत करना
खोज…
संस्करण
संस्करण | रिलीज़ की तारीख |
---|---|
0.99 | 1989/06/08 |
1.01 | 1989/06/23 |
2.0 | 1996/12/31 |
2.02 | 1998/04/20 |
2.03 | 1999/02/19 |
2.04 | 2001/03/21 |
2.05b | 2002/07/17 |
3.0 | 2004/08/03 |
3.1 | 2005/12/08 |
3.2 | 2006-10-11 |
4.0 | 2009/02/20 |
4.1 | 2009-12-31 |
4.2 | 2011-02-13 |
4.3 | 2014-02-26 |
4.4 | 2016/09/15 |
हैलो वर्ल्ड वेरिएबल्स का उपयोग करना
निम्नलिखित सामग्री के साथ hello.sh
नामक एक नई फ़ाइल बनाएं और इसे chmod +x hello.sh
साथ निष्पादन योग्य अनुमति chmod +x hello.sh
।
निष्पादित / चलाएं:
./hello.sh
#!/usr/bin/env bash
# Note that spaces cannot be used around the `=` assignment operator
whom_variable="World"
# Use printf to safely output the data
printf "Hello, %s\n" "$whom_variable"
#> Hello, World
निष्पादित होने पर यह Hello, World
टू स्टैंडर्ड आउटपुट को प्रिंट करेगा।
यह बताने के लिए कि स्क्रिप्ट कहाँ है आपको बहुत विशिष्ट होने की आवश्यकता है, इसे सामान्य निर्देशिका के साथ, ./
को इंगित करके, यदि यह आपकी कार्यशील निर्देशिका है, जहाँ .
वर्तमान निर्देशिका के लिए एक उपनाम है। यदि आप निर्देशिका निर्दिष्ट नहीं करते हैं, तो bash
$PATH
परिवेश चर में निहित किसी एक निर्देशिका में स्क्रिप्ट का पता लगाने का प्रयास करता है।
निम्न कोड एक तर्क $1
स्वीकार करता है, जो पहली कमांड लाइन तर्क है, और Hello,
बाद, इसे एक स्वरूपित स्ट्रिंग में आउटपुट करता है।
निष्पादित करें / चलाएं:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
यह ध्यान रखना महत्वपूर्ण है कि $1
को दोहरे उद्धरण में उद्धृत किया जाना है, न कि एकल उद्धरण में। "$1"
पहले कमांड लाइन तर्क के रूप में वांछित है, जबकि '$1'
शाब्दिक स्ट्रिंग $1
मूल्यांकन करता है।
सुरक्षा नोट:
दोहरे उद्धरण चिह्नों के भीतर चर पाठ रखने के महत्व को समझने के लिए बैश गोले में एक चर को भूलने के लिए सुरक्षा निहितार्थ पढ़ें।
नमस्ते दुनिया
इंटरएक्टिव शेल
बैश शेल आमतौर पर अंतःक्रियात्मक रूप से उपयोग किया जाता है: यह आपको कमांड दर्ज करने और संपादित करने देता है, फिर रिटर्न कुंजी दबाने पर उन्हें निष्पादित करता है। कई यूनिक्स-आधारित और यूनिक्स जैसे ऑपरेटिंग सिस्टम बैश को उनके डिफ़ॉल्ट शेल (विशेष रूप से लिनक्स और मैकओएस) के रूप में उपयोग करते हैं। टर्मिनल स्वचालित रूप से स्टार्टअप पर एक इंटरैक्टिव बैश शेल प्रक्रिया में प्रवेश करता है।
निम्नलिखित टाइप करके आउटपुट Hello World
:
echo "Hello World"
#> Hello World # Output Example
टिप्पणियाँ
आप टर्मिनल में शेल के नाम को टाइप करके शेल को बदल सकते हैं। उदाहरण के लिए:
sh
,bash
इत्यादि।echo
एक बैश बिलिन कमांड है जो मानक आउटपुट को प्राप्त होने वाले तर्कों को लिखता है। यह डिफ़ॉल्ट रूप से आउटपुट के लिए एक नई पंक्ति जोड़ता है।
गैर-इंटरेक्टिव शेल
बैश शेल को एक स्क्रिप्ट से गैर-अंतःक्रियात्मक रूप से चलाया जा सकता है, जिससे शेल को मानव बातचीत की आवश्यकता नहीं होती है। इंटरएक्टिव व्यवहार और स्क्रिप्टेड व्यवहार समान होना चाहिए - यूनिक्स V7 बॉर्न शेल और ट्रांसीवरली बैश का एक महत्वपूर्ण डिजाइन विचार। इसलिए कमांड लाइन पर जो कुछ भी किया जा सकता है उसे पुन: उपयोग के लिए एक स्क्रिप्ट फ़ाइल में रखा जा सकता है।
Hello World
स्क्रिप्ट बनाने के लिए इन चरणों का पालन करें:
एक नई फ़ाइल बनाएं जिसका नाम है
hello-world.sh
touch hello-world.sh
chmod
+x hello-world.sh
चलाकर स्क्रिप्ट को निष्पादन योग्य+x hello-world.sh
इस कोड को जोड़ें:
#!/bin/bash echo "Hello World"
पंक्ति 1 : स्क्रिप्ट की पहली पंक्ति चरित्र क्रम
#!
शुरू होनी चाहिए#!
, शेबंग 1 के रूप में जाना जाता है। शेबबैंग ऑपरेटिंग सिस्टम को निर्देश देता है कि वह बैश शेल को रन/bin/bash
, इसे स्क्रिप्ट के मार्ग को एक तर्क के रूप में पारित करता है।जैसे
/bin/bash hello-world.sh
पंक्ति 2 :
Hello World
को मानक आउटपुट में लिखने के लिएecho
कमांड का उपयोग करता है।
निम्न में से किसी एक का उपयोग करके कमांड लाइन से
hello-world.sh
स्क्रिप्ट निष्पादित करें:-
./hello-world.sh
- सबसे अधिक इस्तेमाल किया जाता है, और सिफारिश की जाती है -
/bin/bash hello-world.sh
-
bash hello-world.sh
- संभालने/bin
आपके$PATH
-
sh hello-world.sh
-
वास्तविक उत्पादन उपयोग के लिए, आप .sh
एक्सटेंशन को छोड़ देंगे (जो वैसे भी भ्रामक है, क्योंकि यह एक बैश स्क्रिप्ट है, sh
स्क्रिप्ट नहीं) और संभवत: फ़ाइल को अपने PATH
भीतर निर्देशिका में ले जाएं ताकि यह आपके लिए उपलब्ध हो आपकी वर्तमान कार्यशील निर्देशिका, जैसे कि cat
या ls
जैसे सिस्टम कमांड।
सामान्य गलतियों में शामिल हैं:
फ़ाइल पर निष्पादन की अनुमति लागू करने के लिए भूल जाते हैं, यानी,
chmod +x hello-world.sh
, जिसके परिणामस्वरूप आउटपुट./hello-world.sh: Permission denied
।विंडोज पर स्क्रिप्ट को एडिट करना, जो गलत लाइन एंडिंग कैरेक्टर्स को प्रोड्यूस करता है जिसे Bash हैंडल नहीं कर सकता है।
एक सामान्य लक्षण यह है
: command not found
जहां गाड़ी वापसी ने कर्सर को लाइन की शुरुआत के लिए मजबूर किया है, त्रुटि संदेश में बृहदान्त्र से पहले पाठ को अधिलेखित कर दिया।dos2unix
प्रोग्राम का उपयोग करके स्क्रिप्ट को ठीक किया जा सकता है।एक उदाहरण का उपयोग करें:
dos2unix hello-world.sh
dos2unix
फ़ाइल इनलाइन को संपादित करता है।sh ./hello-world.sh
का उपयोग करतेsh ./hello-world.sh
, यह महसूस न करना किbash
औरsh
अलग-अलग विशेषताओं के साथ अलग-अलग गोले हैं (हालांकि जब से बैश पीछे की ओर संगत है, विपरीत गलती हानिरहित है)।वैसे भी, प्रत्येक स्क्रिप्ट के फ़ाइल नाम से पहले स्पष्ट रूप से
bash
याsh
(याpython
याperl
याawk
याruby
या ...) लिखना स्क्रिप्ट की शबंग रेखा पर निर्भर करना काफी बेहतर है।अपनी स्क्रिप्ट को अधिक पोर्टेबल बनाने के लिए उपयोग करने के लिए एक सामान्य शेबबैंग लाइन है, जो
#!/usr/bin/env bash
के लिए हार्ड-कोडिंग के बजाय#!/usr/bin/env bash
का उपयोग करती है। इस तरह से,/usr/bin/env
अस्तित्व में है, लेकिन उस समय से परे,bash
सिर्फ अपने पर होने की जरूरत हैPATH
। कई प्रणालियों पर,/bin/bash
मौजूद नहीं है, और आपको/usr/local/bin/bash
या कुछ अन्य निरपेक्ष पथ का उपयोग करना चाहिए; यह परिवर्तन उस के विवरण का पता लगाने से बचता है।
1 को शा-बैंग, हैशबैंग, पाउंड-बैंग, हैश-प्लिंग के रूप में भी जाना जाता है।
बैश बिल्ट-इन के लिए जानकारी देखना
help <command>
यह निर्दिष्ट बिल्ट-इन के लिए बैश सहायता (मैनुअल) पेज प्रदर्शित करेगा।
उदाहरण के लिए, help unset
से पता चलता है:
unset: unset [-f] [-v] [-n] [name ...] Unset values and attributes of shell variables and functions. For each NAME, remove the corresponding variable or function. Options: -f treat each NAME as a shell function -v treat each NAME as a shell variable -n treat each NAME as a name reference and unset the variable itself rather than the variable it references Without options, unset first tries to unset a variable, and if that fails, tries to unset a function. Some variables cannot be unset; also see `readonly'. Exit Status: Returns success unless an invalid option is given or a NAME is read-only.
एक संक्षिप्त विवरण के साथ सभी बिल्ट-इन की एक सूची देखने के लिए, उपयोग करें
help -d
उपयोगकर्ता इनपुट के साथ हैलो वर्ल्ड
निम्नलिखित इनपुट के लिए एक उपयोगकर्ता को संकेत देगा, और फिर उस इनपुट को एक स्ट्रिंग (पाठ) के रूप में एक चर में संग्रहीत करेगा। तब चर का उपयोग उपयोगकर्ता को संदेश देने के लिए किया जाता है।
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
यहाँ read
कमांड मानक इनपुट से डेटा की एक लाइन को वेरिएबल name
में पढ़ता है। यह तब $name
का उपयोग करके संदर्भित किया जाता है और echo
का उपयोग करके मानक से मुद्रित किया जाता है।
उदाहरण आउटपुट:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
यहां उपयोगकर्ता ने "मैट" नाम दर्ज किया, और इस कोड का उपयोग Hello, Matt.
कहने के लिए किया गया था Hello, Matt.
।
और यदि आप इसे मुद्रित करते समय चर मान में कुछ जोड़ना चाहते हैं, तो चर नाम के चारों ओर घुंघराले कोष्ठक का उपयोग करें जैसा कि निम्नलिखित विवरण में दिखाया गया है:
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
उदाहरण आउटपुट:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
यहाँ जब उपयोगकर्ता एक क्रिया में प्रवेश करता है, तो मुद्रण करते समय "ing" को उस क्रिया से जोड़ा जाता है।
नामांकित तर्क को संभालना
#!/bin/bash
deploy=false
uglify=false
while (( $# > 1 )); do case $1 in
--deploy) deploy="$2";;
--uglify) uglify="$2";;
*) break;
esac; shift 2
done
$deploy && echo "will deploy... deploy = $deploy"
$uglify && echo "will uglify... uglify = $uglify"
# how to run
# chmod +x script.sh
# ./script.sh --deploy true --uglify false
हैलो वर्ल्ड "डिबग" मोड में
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
-x
तर्क आपको स्क्रिप्ट में प्रत्येक पंक्ति के माध्यम से चलने में सक्षम बनाता है। एक अच्छा उदाहरण यहाँ है:
$ cat hello.sh
#!/bin/bash
echo "Hello World\n"
adding_string_to_number="s"
v=$(expr 5 + $adding_string_to_number)
$ ./hello.sh
Hello World
expr: non-integer argument
उपरोक्त संकेतित त्रुटि स्क्रिप्ट का पता लगाने के लिए पर्याप्त नहीं है; हालाँकि, निम्न तरीके का उपयोग करने से आपको एक बेहतर समझ मिलती है कि स्क्रिप्ट में त्रुटि कहाँ दिखती है।
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
स्ट्रिंग्स में उद्धरण का महत्व
बैश में स्ट्रिंग विस्तार के लिए उद्धरण महत्वपूर्ण है। इनके साथ, आप नियंत्रित कर सकते हैं कि कैसे bash पार्स करता है और आपके स्ट्रिंग्स को विस्तारित करता है।
दो प्रकार के उद्धरण हैं:
- कमजोर : दोहरे उद्धरण चिह्नों का उपयोग करता है: "
- मजबूत : एकल उद्धरण का उपयोग करता है: '
यदि आप अपने तर्क का विस्तार करना चाहते हैं, तो आप कमजोर उद्धरण का उपयोग कर सकते हैं:
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
यदि आप अपने तर्क का विस्तार नहीं करना चाहते हैं, तो आप सशक्त उद्धरण का उपयोग कर सकते हैं:
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
आप विस्तार को रोकने के लिए भागने का भी उपयोग कर सकते हैं:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
शुरुआती विवरण के अलावा अन्य अधिक विस्तृत जानकारी के लिए, आप इसे यहाँ पढ़ना जारी रख सकते हैं ।