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:

  1. Skapa en ny fil som heter hello-world.sh

    touch hello-world.sh
    
  2. Gör skriptet körbart genom att köra chmod +x hello-world.sh

  3. 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 skriva Hello World till standardutgången.

  1. hello-world.sh skriptet hello-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:

  1. 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 .

  2. 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.

  3. sh ./hello-world.sh använder sh ./hello-world.sh , inser sh ./hello-world.sh inte att bash och sh ä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 eller sh (eller python eller perl eller awk eller ruby 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åste bash bara vara på din PATH . 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 .



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow