Grunderna för Bash

Slutförd

Förståelse för Bash börjar med en förståelse för Bash-syntaxen. När du känner till syntaxen kan du tillämpa den på varje Bash-kommando som du kör.

Den fullständiga syntaxen för ett Bash-kommando är:

command [options] [arguments]

Bash behandlar den första sträng som det påträffar som ett kommando. Följande kommando använder Bash-kommandot ls (för "lista") för att visa innehållet i den aktuella arbetskatalogen:

ls

Bash-kommandon åtföljs ofta av argument. Du kan till exempel inkludera ett sökvägsnamn i ett ls-kommando för att visa innehållet i en annan katalog:

ls /etc

De flesta Bash-kommandon har alternativ som ändrar hur de fungerar. Alternativ, som även kallas flaggor, ger kommandon mer specifika instruktioner. Till exempel är filer och kataloger vars namn börjar med en punkt dolda från användaren och visas inte av ls. Du kan dock inkludera flaggan -a (för "alla") i ett ls-kommando och se allt i målkatalogen:

ls -a /etc

Du kan till och med kombinera flaggor för att göra kommandon kortfattade. Exempel: I stället för att ange ls -a -l /etc för att visa alla filer och kataloger i Linux-katalogen /etc i långt format kan du ange det här:

ls -al /etc

Bash är koncist. Ibland är det imponerande (och en källa till viss stolthet bland Bash-fans) hur mycket du kan utföra med ett enda kommando.

Skaffa hjälp

De alternativ och argument som kan användas, eller måste användas, varierar mellan olika kommandon. Lyckligtvis är Bash-dokumentationen inbyggd i operativsystemet. Hjälpen kan nås med ett enda kommando. Om du vill veta mer om alternativen för ett kommando använder du kommandot man (för "manual"). Om du till exempel vill visa alla alternativ för kommandot mkdir ("make directory", skapa katalog) gör du följande:

man mkdir

man är en värdefull resurs när du lär dig Bash. man är hur du hittar den information du behöver för att förstå hur ett kommando fungerar.

De flesta Bash- och Linux-kommandon stöder alternativet --help. Detta visar en beskrivning av kommandots syntax och alternativ. Prova genom att ange mkdir --help. Utdata ser ut ungefär så här:

Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
    
Mandatory arguments to long options are mandatory for short options too.
  -m, --mode=MODE   set file mode (as in chmod), not a=rwx - umask
  -p, --parents     no error if existing, make parent directories as needed
  -v, --verbose     print a message for each created directory
  -Z                   set SELinux security context of each created directory
                         to the default type
      --context[=CTX]  like -Z, or if CTX is specified then set the SELinux
                         or SMACK security context to CTX
      --help     display this help and exit
      --version  output version information and exit
    
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report mkdir translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'

Hjälp som erhålls på det här sättet är vanligtvis mer koncis än hjälp som fås via man.

Använda jokertecken

Jokertecken är symboler som representerar ett eller flera tecken i Bash-kommandon. Det jokertecken som används oftast är asterisken. Den representerar noll tecken eller en sekvens med tecken. Anta att den aktuella katalogen innehåller hundratals bildfiler, men du vill bara se PNG-filerna. de vars filnamn slutar med .png. Följande kommando visar bara de filerna:

ls *.png

Kommentar

Till skillnad från andra operativsystem har Linux inget begrepp för filnamnstillägg. Det innebär dock inte att PNG-filer inte har ett .png-tillägg. Det innebär helt enkelt att Linux inte fäster någon särskild betydelse på det faktum att filnamnen slutar med .png.

Anta att den aktuella katalogen även innehåller JPEG-filer. Vissa slutar i .jpg, medan andra slutar i .jpeg. Här är ett sätt att lista alla JPEG-filer:

ls *.jpg *.jpeg

Och här är ett annat:

ls *.jp*g

Jokertecknet * matchar noll eller fler tecken, men jokertecknet ? representerar ett enskilt tecken. Om den aktuella katalogen innehåller filer som heter 0001.jpg, 0002.jpg och så vidare till och med 0009.jpg visar följande kommando alla dessa:

ls 000?.jpg

Ett annat sätt att filtrera utdata med hjälp av jokertecken är att använda hakparenteser, som anger grupper med tecken. Följande kommando visar alla filer i den aktuella katalogen vars namn innehåller en punkt som omedelbart följs av ett gement J eller P. Det visar alla filer av typerna .jpg, .jpeg och .png men inte .gif:

ls *.[jp]*

I Linux är filnamn och de kommandon som körs på dem skiftlägeskänsliga. Om du vill lista alla filer i den aktuella katalogen vars namn innehåller en punkt följt av ett versalt eller ett gement J eller P kan du ange följande:

ls *.[jpJP]*

Uttryck i hakparenteser kan representera intervall med tecken. Till exempel visar följande kommando alla filer i den aktuella katalogen vars namn börjar med en gemen bokstav:

ls [a-z]*

Det här kommandot å andra sidan visar alla filer i den aktuella katalogen vars namn börjar med en versal bokstav:

ls [A-Z]*

Och det här visar alla filer i den aktuella katalogen vars namn börjar med en gemen eller en versal bokstav:

ls [a-zA-Z]*

Kan du med allt detta i åtanke gissa vad följande kommandon gör?

ls [0-9]*
ls *[0-9]*
ls *[0-9]

Om du behöver använda ett av jokertecknen som ett vanligt tecken gör du det till en literal, eller "undantar" det, genom att skriva ett omvänt snedstreck före tecknet. Så om du av någon anledning hade en asterisk som en del av ett filnamn – något du aldrig bör göra avsiktligt – kan du söka efter den med hjälp av ett kommando som:

$ ls *\**