Szukaj…


Wersje

Wersja Data wydania
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 31.12.2009
4.2 13.02.2011
4.3 26.02.2014
4.4 15.09.2016

Witaj świecie, używając zmiennych

Utwórz nowy plik o nazwie hello.sh o następującej treści i nadaj mu uprawnienia do wykonywania za pomocą chmod +x hello.sh .

Wykonaj / Uruchom przez: ./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

Spowoduje to wydrukowanie Hello, World na standardowe wyjście po uruchomieniu.

Aby powiedzieć bashowi, gdzie jest skrypt, musisz być bardzo konkretny, wskazując go na katalog zawierający, zwykle z ./ jeśli jest to katalog roboczy, gdzie . to alias do bieżącego katalogu. Jeśli nie określisz katalogu, bash spróbuje zlokalizować skrypt w jednym z katalogów zawartych w zmiennej środowiskowej $PATH .


Poniższy kod akceptuje argument $1 , który jest pierwszym argumentem wiersza poleceń, i wysyła go w sformatowanym ciągu, po Hello,

Wykonaj / Uruchom przez: ./hello.sh World

#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World

Ważne jest, aby pamiętać, że $1 musi być cytowany w podwójnym cudzysłowie, a nie w jednym cudzysłowie. "$1" rozwija się do pierwszego argumentu wiersza poleceń, zależnie od potrzeb, podczas gdy '$1' ma wartość dosłownym ciąg $1 .

Uwaga bezpieczeństwa:
Przeczytaj Implikacje bezpieczeństwa związane z zapomnieniem cytowania zmiennej w powłokach bash, aby zrozumieć znaczenie umieszczania tekstu zmiennej w podwójnych cudzysłowach.

Witaj świecie

Interactive Shell

Powłoka Bash jest powszechnie używana interaktywnie: pozwala wprowadzać i edytować polecenia, a następnie uruchamia je po naciśnięciu klawisza Return . Wiele systemów operacyjnych opartych na Uniksie i podobnych do niego używa Bash jako domyślnej powłoki (zwłaszcza Linux i macOS). Terminal automatycznie uruchamia interaktywny proces powłoki Bash podczas uruchamiania.

Wyjdź z Hello World , wpisując następujące polecenie:

echo "Hello World"
#> Hello World  # Output Example

Notatki

  • Możesz zmienić powłokę, wpisując nazwę powłoki w terminalu. Na przykład: sh , bash itp.

  • echo to wbudowane polecenie Bash, które zapisuje otrzymane argumenty na standardowym wyjściu. Domyślnie dodaje nowy wiersz do wyniku.


Nieinteraktywna powłoka

Powłokę Bash można również uruchamiać ze skryptu w sposób nieinteraktywny , dzięki czemu powłoka nie wymaga interakcji człowieka. Zachowanie interaktywne i zachowanie skryptowe powinny być identyczne - ważne rozważanie projektowe powłoki Unix V7 Bourne i przejściowo Bash. Dlatego wszystko, co można zrobić w wierszu poleceń, można umieścić w pliku skryptu w celu ponownego użycia.

Wykonaj następujące kroki, aby utworzyć skrypt Hello World :

  1. Utwórz nowy plik o nazwie hello-world.sh

    touch hello-world.sh
    
  2. Ustaw skrypt jako wykonywalny, uruchamiając chmod +x hello-world.sh

  3. Dodaj ten kod:

    #!/bin/bash
    echo "Hello World"
    

    Wiersz 1 : pierwszy wiersz skryptu musi zaczynać się od sekwencji znaków #! , określane jako shebang 1 . Shebang instruuje system operacyjny, aby uruchomił /bin/bash , powłokę Bash, przekazując mu ścieżkę skryptu jako argument.

    Np. /bin/bash hello-world.sh

    Wiersz 2 : używa polecenia echo do napisania Hello World na standardowym wyjściu.

  1. Uruchom skrypt hello-world.sh z wiersza polecenia, używając jednej z następujących czynności:

    • ./hello-world.sh - najczęściej używane i zalecane
    • /bin/bash hello-world.sh
    • bash hello-world.sh - zakładając, że /bin jest w twojej $PATH
    • sh hello-world.sh

Do rzeczywistego użytku produkcyjnego .sh rozszerzenie .sh (które i tak wprowadza w błąd, ponieważ jest to skrypt Bash, a nie skrypt sh ) i być może przenosisz plik do katalogu w PATH , aby był dostępny dla Ciebie niezależnie od bieżący katalog roboczy, podobnie jak polecenie systemowe, takie jak cat lub ls .

Typowe błędy to:

  1. Zapomnienie zastosowania uprawnień do wykonania pliku, tj. chmod +x hello-world.sh , w wyniku czego powstaje ./hello-world.sh: Permission denied .

  2. Edycja skryptu w systemie Windows, który wytwarza niepoprawne znaki kończące linię, których Bash nie może obsłużyć.

    Typowym objawem jest : command not found którym powrót karetki zmusił kursor do początku wiersza, zastępując tekst przed dwukropkiem w komunikacie o błędzie.

    Skrypt można naprawić za pomocą programu dos2unix .

    Przykład użycia: dos2unix hello-world.sh

    dos2unix edytuje plik bezpośrednio.

  3. Używając sh ./hello-world.sh , nie zdając sobie sprawy, że bash i sh są odrębnymi powłokami o różnych cechach (chociaż skoro Bash jest kompatybilny wstecz, błąd przeciwny jest nieszkodliwy).

    W każdym razie po prostu poleganie na linii shebang skryptu jest zdecydowanie lepsze niż jawne pisanie bash lub sh (lub python lub perl awk lub ruby lub ...) przed nazwą pliku każdego skryptu.

    Popularną linią shebang, aby uczynić skrypt bardziej przenośnym, jest użycie #!/usr/bin/env bash zamiast twardego kodowania ścieżki do Bash. W ten sposób /usr/bin/env musi istnieć, ale poza tym punktem bash musi znajdować się na PATH . W wielu systemach /bin/bash nie istnieje i powinieneś użyć /usr/local/bin/bash lub innej bezwzględnej ścieżki; ta zmiana pozwala uniknąć szczegółów tego.


1 Nazywany również sha-bang, hashbang, funt-bang, hash-pling.

Wyświetlanie informacji o wbudowanych aplikacjach Bash

help <command>

Spowoduje to wyświetlenie strony pomocy Bash (ręcznej) dla określonego wbudowanego.

Na przykład help unset pokaże:

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.

Aby wyświetlić listę wszystkich wbudowanych funkcji z krótkim opisem, użyj

help -d

Witaj świecie z danymi wejściowymi użytkownika

Poniższe monituje użytkownika o wprowadzenie danych, a następnie zapisuje je jako ciąg (tekst) w zmiennej. Zmienna jest następnie używana do przekazania użytkownikowi wiadomości.

#!/usr/bin/env bash
echo  "Who are you?"
read name
echo "Hello, $name."

Polecenie read tutaj odczytuje jeden wiersz danych ze standardowego wejścia do name zmiennej. Jest to następnie określane za pomocą $name i drukowane na standardowe wyjście za pomocą echo .

Przykładowe dane wyjściowe:

$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.

Tutaj użytkownik wprowadził nazwę „Matt”, a ten kod został użyty do powiedzenia „ Hello, Matt. .

A jeśli chcesz dodać coś do wartości zmiennej podczas drukowania, użyj nawiasów klamrowych wokół nazwy zmiennej, jak pokazano w poniższym przykładzie:

#!/usr/bin/env bash
echo  "What are you doing?"
read action
echo "You are ${action}ing."

Przykładowe dane wyjściowe:

$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.

W tym przypadku, gdy użytkownik wprowadza akcję, „ing” jest dołączane do tej akcji podczas drukowania.

Obsługa nazwanych argumentów

#!/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

Hello World w trybie „Debuguj”

$ cat hello.sh 
#!/bin/bash 
echo "Hello World"
$ bash -x hello.sh 
+ echo Hello World
Hello World

Argument -x umożliwia przejście przez każdą linię w skrypcie. Dobry przykład jest tutaj:

$ 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

Podany powyżej błąd nie wystarczy do śledzenia skryptu; jednak użycie następującego sposobu daje lepsze poczucie, gdzie szukać błędu w skrypcie.

$ bash -x hello.sh 
+ echo Hello World\n
Hello World

+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=

Znaczenie cytowania w ciągach

Cytowanie jest ważne dla rozwijania łańcucha w bash. Dzięki nim możesz kontrolować, w jaki sposób bash analizuje i rozwija swoje łańcuchy.

Istnieją dwa rodzaje cytowania:

  • Słaby : używa podwójnych cudzysłowów: „
  • Mocne : używa pojedynczych cudzysłowów: „

Jeśli chcesz bash rozwinąć argument, możesz użyć Słabego cytowania :

#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World

Jeśli nie chcesz bash, aby rozwinąć argument, możesz użyć silnego cytowania :

#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world

Możesz także użyć klawisza Escape, aby zapobiec ekspansji:

#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world

Aby uzyskać bardziej szczegółowe informacje inne niż informacje dla początkujących, możesz je dalej przeczytać tutaj .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow