Bash Handledning
Komma igång med Bash
Sök…
versioner
Version | Utgivningsdatum |
---|---|
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 |
Hej värld med hjälp av variabler
Skapa en ny fil som heter hello.sh
med följande innehåll och ge den körbara behörigheter med chmod +x hello.sh
.
Kör / kör via:
./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
Detta kommer att skriva ut Hello, World
till standardutgång när det körs.
För att säga bash var skriptet är måste du vara väldigt specifik genom att peka det till den katalog som innehåller, normalt med ./
om det är din arbetskatalog, var .
är ett alias till den aktuella katalogen. Om du inte anger katalogen försöker bash
att hitta skriptet i ett av de kataloger som finns i miljövariabeln $PATH
.
Följande kod accepterar ett argument $1
, som är det första kommandoradsargumentet, och matar ut det i en formaterad sträng, efter Hello,
Kör / kör via:
./hello.sh World
#!/usr/bin/env bash
printf "Hello, %s\n" "$1"
#> Hello, World
Det är viktigt att notera att $1
måste anges i dubbla offertar, inte en enda offert. "$1"
expanderas till det första kommandoradsargumentet, efter önskemål, medan '$1'
utvärderas till bokstavlig sträng $1
.
Säkerhetsanmärkning:
Läs säkerhetsimplikationerna av att glömma att citera en variabel i basskal för att förstå vikten av att placera den variabla texten i dubbla citat.
Hej världen
Interaktivt skal
Bash-skalet används vanligtvis interaktivt: Det låter dig skriva in och redigera kommandon och sedan köra dem när du trycker på Returtangenten . Många Unix-baserade och Unix-liknande operativsystem använder Bash som standardskal (särskilt Linux och macOS). Terminalen går automatiskt in i en interaktiv Bash-skalprocess vid start.
Output Hello World
genom att skriva följande:
echo "Hello World"
#> Hello World # Output Example
anteckningar
Du kan ändra skalet genom att bara skriva namnet på skalet i terminalen. Till exempel:
sh
,bash
, etc.echo
är ett Bash-inbyggt kommando som skriver de argument som den får till standardutgången. Den lägger till en ny linje till utgången som standard.
Icke-interaktivt skal
Bash-skalet kan också köras icke-interaktivt från ett manus, vilket gör att skalet inte kräver någon mänsklig interaktion. Interaktivt beteende och skriptat beteende bör vara identiska - en viktig designhänsyn till Unix V7 Bourne-skalet och övergående Bash. Därför kan allt som kan göras på kommandoraden läggas i en skriptfil för återanvändning.
Följ dessa steg för att skapa ett Hello World
skript:
Skapa en ny fil som heter
hello-world.sh
touch hello-world.sh
Gör skriptet körbart genom att köra
chmod
+x hello-world.sh
Lägg till den här koden:
#!/bin/bash echo "Hello World"
Rad 1 : Skriptets första rad måste börja med teckensekvensen
#!
, kallad shebang 1 . Shebang instruerar operativsystemet att köra/bin/bash
, Bash-skalet och lämna det skriptets sökväg som ett argument.Exempelvis
/bin/bash hello-world.sh
Rad 2 : Använder
echo
att skrivaHello World
till standardutgången.
hello-world.sh
skriptethello-world.sh
från kommandoraden med något av följande:-
./hello-world.sh
- används ofta och rekommenderas -
/bin/bash hello-world.sh
-
bash hello-world.sh
- antar/bin
finns i din$PATH
-
sh hello-world.sh
-
För verklig produktionsanvändning skulle du utelämna .sh
förlängningen (som är vilseledande ändå, eftersom detta är ett Bash-skript, inte ett sh
skript) och kanske flytta filen till en katalog inom din PATH
så att den är tillgänglig för dig oavsett din nuvarande arbetskatalog, precis som ett systemkommando som cat
eller ls
.
Vanliga misstag inkluderar:
Glömmer att tillämpa utföra tillstånd på filen, dvs
chmod +x hello-world.sh
, vilket resulterar i utdata från./hello-world.sh: Permission denied
.Redigering av skriptet på Windows, som producerar felaktiga linjeavslutstecken som Bash inte kan hantera.
Ett vanligt symptom är
: command not found
där vagnens retur har tvingat markören till början av raden och skriv över texten före kolon i felmeddelandet.Skriptet kan fixas med programmet
dos2unix
.Ett exempel på användning:
dos2unix hello-world.sh
dos2unix
redigerar filen inline.sh ./hello-world.sh
användersh ./hello-world.sh
, insersh ./hello-world.sh
inte attbash
ochsh
är distinkta skal med distinkta funktioner (men eftersom Bash är bakåtkompatibelt är det motsatta misstaget ofarligt).Hur som helst, helt enkelt förlita sig på skriptets shebang-linje är mycket att föredra än att uttryckligen skriva
bash
ellersh
(ellerpython
ellerperl
ellerawk
ellerruby
eller ...) före varje skript filnamn.En vanlig shebangrad som ska användas för att göra ditt skript mer portabelt är att använda
#!/usr/bin/env bash
istället för att hårdkoda en sökväg till Bash. På det sättet/usr/bin/env
existera, men utöver den punkten måstebash
bara vara på dinPATH
. På många system finns/bin/bash
inte, och du bör använda/usr/local/bin/bash
eller någon annan absolut sökväg; denna förändring undviker att behöva räkna ut detaljerna i det.
1 Kallas också sha-bang, hashbang, pund-bang, hash-pling.
Visar information för inbyggda Bash
help <command>
Detta visar sidan Bash help (manuell) för det angivna inbyggda.
Till exempel visar 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.
Använd en för att se en lista över alla inbyggda program med en kort beskrivning
help -d
Hej värld med användarinmatning
Följande frågar en användare om inmatning och lagrar sedan den inmatningen som en sträng (text) i en variabel. Variabeln används sedan för att ge ett meddelande till användaren.
#!/usr/bin/env bash
echo "Who are you?"
read name
echo "Hello, $name."
Kommandot som read
här läser en rad med data från standardinmatning i variabelns name
. Detta refereras sedan med $name
och skrivs ut till standard ut med echo
.
Exempel på utgång:
$ ./hello_world.sh
Who are you?
Matt
Hello, Matt.
Här angav användaren namnet "Matt", och den här koden användes för att säga Hello, Matt.
.
Och om du vill lägga till något till variabelvärdet när du skriver ut det använder du lockiga parenteser runt variabelns namn som visas i följande exempel:
#!/usr/bin/env bash
echo "What are you doing?"
read action
echo "You are ${action}ing."
Exempel på utgång:
$ ./hello_world.sh
What are you doing?
Sleep
You are Sleeping.
Här när användaren inleder en handling, läggs "ing" till den åtgärden under utskrift.
Hantering av namngivna argument
#!/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
Hej världen i "Debug" -läge
$ cat hello.sh
#!/bin/bash
echo "Hello World"
$ bash -x hello.sh
+ echo Hello World
Hello World
Argumentet -x
låter dig gå igenom varje rad i skriptet. Ett bra exempel är här:
$ 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
Ovanstående felmeddelande räcker inte för att spåra skriptet; Men genom att använda följande sätt får du en bättre känsla för var du kan leta efter felet i skriptet.
$ bash -x hello.sh
+ echo Hello World\n
Hello World
+ adding_string_to_number=s
+ expr 5 + s
expr: non-integer argument
+ v=
Betydelsen av citationstecken i strängar
Citationstecken är viktigt för strängutvidgning i bash. Med dessa kan du styra hur bash parar och utvidgar dina strängar.
Det finns två typer av citat:
- Svag : använder dubbla citat: "
- Stark : använder enstaka citat: '
Om du vill bash för att utöka ditt argument kan du använda svaga citat :
#!/usr/bin/env bash
world="World"
echo "Hello $world"
#> Hello World
Om du inte vill bash för att utöka ditt argument kan du använda Stark citat :
#!/usr/bin/env bash
world="World"
echo 'Hello $world'
#> Hello $world
Du kan också använda flykt för att förhindra expansion:
#!/usr/bin/env bash
world="World"
echo "Hello \$world"
#> Hello $world
För mer detaljerad information utom nybörjarinformation kan du fortsätta läsa den här .