Bash Tutorial
Iniziare con Bash
Ricerca…
Versioni
Versione | Data di rilascio |
---|---|
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 |
Ciao mondo usando variabili
Crea un nuovo file chiamato hello.sh
con il seguente contenuto e forniscilo autorizzazioni eseguibili con chmod +x hello.sh
.
Esegui / Esegui tramite:
./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
Questo stamperà Hello, World
sullo standard output quando viene eseguito.
Per capire dov'è lo script, devi essere molto specifico, puntandolo alla directory contenente, normalmente con ./
se è la tua directory di lavoro, dove .
è un alias della directory corrente. Se non si specifica la directory, bash
tenta di individuare lo script in una delle directory contenute nella variabile di ambiente $PATH
.
Il seguente codice accetta un argomento $1
, che è il primo argomento della riga di comando, e lo restituisce in una stringa formattata, seguendo Hello,
Esegui / Esegui tramite:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
È importante notare che $1
deve essere quotato in virgolette doppie, non in virgolette singole. "$1"
espande al primo argomento della riga di comando, come desiderato, mentre '$1'
valuta la stringa letterale $1
.
Nota di sicurezza:
Leggi le implicazioni sulla sicurezza di dimenticare di citare una variabile in shell bash per capire l'importanza di inserire il testo variabile tra virgolette.
Ciao mondo
Shell interattiva
La shell Bash viene comunemente utilizzata in modo interattivo: consente di immettere e modificare i comandi, quindi li esegue quando si preme il tasto A capo . Molti sistemi operativi basati su Unix e Unix usano Bash come shell predefinita (in particolare Linux e macOS). Il terminale immette automaticamente un processo di shell Bash interattivo all'avvio.
Output Hello World
digitando quanto segue:
echo "Hello World"
#> Hello World # Output Example
Gli appunti
Puoi cambiare la shell semplicemente digitando il nome della shell nel terminale. Ad esempio:
sh
,bash
, ecc.echo
è un comando builtin di Bash che scrive gli argomenti che riceve sullo standard output. Aggiunge una nuova riga all'output, per impostazione predefinita.
Shell non interattiva
La shell Bash può anche essere eseguita in modo non interattivo da uno script, rendendo la shell non richiede interazione umana. Il comportamento interattivo e il comportamento basato su script dovrebbero essere identici, un aspetto importante della progettazione della shell Bourne di Unix V7 e di Bash transitivamente. Pertanto tutto ciò che può essere fatto sulla linea di comando può essere inserito in un file di script per il riutilizzo.
Segui questi passaggi per creare uno script Hello World
:
Crea un nuovo file chiamato
hello-world.sh
touch hello-world.sh
Rendi eseguibile lo script eseguendo
chmod
+x hello-world.sh
Aggiungi questo codice:
#!/bin/bash echo "Hello World"
Linea 1 : la prima riga dello script deve iniziare con la sequenza di caratteri
#!
, indicato come Shebang 1 . Lo shebang indica al sistema operativo di eseguire/bin/bash
, la shell Bash, passandogli il percorso dello script come argomento.Ad esempio
/bin/bash hello-world.sh
Linea 2 : utilizza il comando
echo
per scrivereHello World
sullo standard output.
Esegui lo script
hello-world.sh
dalla riga di comando usando uno dei seguenti:-
./hello-world.sh
- più comunemente usato e raccomandato -
/bin/bash hello-world.sh
-
bash hello-world.sh
- assumendo/bin
è nel tuo$PATH
-
sh hello-world.sh
-
Per l'uso di produzione reale, si omettere l'estensione .sh
(che è comunque fuorviante, poiché si tratta di uno script Bash, non di uno script sh
) e forse spostare il file in una directory all'interno del PATH
modo che sia disponibile a prescindere da la tua attuale directory di lavoro, proprio come un comando di sistema come cat
o ls
.
Gli errori più comuni includono:
Dimenticando di applicare il permesso di esecuzione sul file, cioè
chmod +x hello-world.sh
, risultante nell'output di./hello-world.sh: Permission denied
.Modifica dello script su Windows, che produce caratteri di fine riga errati che Bash non può gestire.
Un sintomo comune è
: command not found
dove il ritorno a capo ha forzato il cursore all'inizio della riga, sovrascrivendo il testo prima dei due punti nel messaggio di errore.Lo script può essere corretto usando il programma
dos2unix
.Un esempio di utilizzo:
dos2unix hello-world.sh
dos2unix
modifica il file in linea.Usando
sh ./hello-world.sh
, non cish ./hello-world.sh
conto chebash
esh
sono gusci distinti con caratteristiche distinte (anche se poiché Bash è retrocompatibile, l'errore opposto è innocuo).Ad ogni modo, basandosi semplicemente sulla linea shebang dello script è decisamente preferibile scrivere in modo esplicito
bash
osh
(opython
operl
oawk
oruby
o ...) prima del nome di ogni script.Una linea di shebang comune da usare per rendere il tuo script più portabile è usare
#!/usr/bin/env bash
invece di codificare un percorso per Bash. In questo modo,/usr/bin/env
deve esistere, ma oltre quel puntobash
deve solo essere sul tuoPATH
. Su molti sistemi,/bin/bash
non esiste, e dovresti usare/usr/local/bin/bash
o qualche altro percorso assoluto; questo cambiamento evita di dover capire i dettagli di questo.
1 Chiamato anche sha-bang, hashbang, pound-bang, hash-pling.
Visualizzazione delle informazioni per i built-in di Bash
help <command>
Questo mostrerà la pagina di aiuto di Bash (manuale) per il built-in specificato.
Ad esempio, l' help unset
mostrerà:
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.
Per vedere un elenco di tutti i built-in con una breve descrizione, utilizzare
help -d
Ciao mondo con l'input dell'utente
Quanto segue richiederà all'utente un input e quindi memorizzerà quell'input come una stringa (testo) in una variabile. La variabile viene quindi utilizzata per fornire un messaggio all'utente.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
Il comando qui read
legge una riga di dati dall'input standard nel name
della variabile. Questo viene quindi referenziato usando $name
e stampato allo standard usando echo
.
Esempio di output:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
Qui l'utente ha inserito il nome "Matt" e questo codice è stato usato per dire Hello, Matt.
.
E se vuoi aggiungere qualcosa al valore della variabile mentre lo stampi, usa parentesi graffe attorno al nome della variabile come mostrato nel seguente esempio:
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
Esempio di output:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
Qui quando l'utente inserisce un'azione, "ing" viene aggiunto a quell'azione durante la stampa.
Gestione degli argomenti con nome
#!/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
Ciao mondo in modalità "Debug"
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
L'argomento -x
ti consente di scorrere ogni riga dello script. Un buon esempio è qui:
$ 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
L'errore richiesto sopra non è sufficiente per tracciare lo script; tuttavia, l'uso del seguente metodo ti dà un senso migliore in cui cercare l'errore nello script.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
Importanza della citazione nelle stringhe
La quotazione è importante per l'espansione delle stringhe in bash. Con questi, puoi controllare come la bash analizza e espande le tue stringhe.
Esistono due tipi di quotazione:
- Debole : usa le doppie virgolette: "
- Forte : usa le virgolette singole: '
Se vuoi bash per espandere il tuo argomento, puoi usare Debole Citazioni :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
Se non vuoi bash per espandere il tuo argomento, puoi usare Strong Quoting :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
Puoi anche usare la fuga per impedire l'espansione:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
Per informazioni più dettagliate oltre ai dettagli per principianti, puoi continuare a leggerlo qui .