Difference between revisions of "Bash"

From Teknologisk videncenter
Jump to: navigation, search
m
m (Debugging scripts)
 
(48 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
Bash kaldes ofte i engelsk litteratur for en CLI - Command Line Interpreter eller kommandofortolker på dansk.
 
Bash kaldes ofte i engelsk litteratur for en CLI - Command Line Interpreter eller kommandofortolker på dansk.
  
== Filer ==
+
 
 +
Der findes flere artikler om [[bash]] indelt efter emner:
 +
*[[Bash processer]] - Processer, omdirigeringer, Pipe tegnet
 +
*[[Bash scripts]] - Om at lave bash scripts (while, if, do, test)
 +
*[[Bash scripts II]] Mere avancerede funktioner
 +
*[[Bash examples]] - forskellige bash shell script eksempler
 +
*[[UNIX commands|UNIX/Linux Commands]]
 +
 
 +
= Filer =
 
Selve programmet '''bash''' kan være installeret i forskellige biblioteker på forskellige systemer men findes oftest i /usr/bin biblioteket. På BSD Unix varianter findes '''bash''' ofte i /usr/local/bin. Hvis du ikke ved hvor din lokale '''bash''' findes kan den findes med ''whereis bash'' kommandoen.
 
Selve programmet '''bash''' kan være installeret i forskellige biblioteker på forskellige systemer men findes oftest i /usr/bin biblioteket. På BSD Unix varianter findes '''bash''' ofte i /usr/local/bin. Hvis du ikke ved hvor din lokale '''bash''' findes kan den findes med ''whereis bash'' kommandoen.
 +
 +
 +
{|
 +
|valign=top|'''/etc/profile'''
 +
|Opstartsfil som '''bash''' udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil.
 +
|-
 +
|valign=top|'''$HOME/.bash_profile'''
 +
|Denne fil er din personlige opstartsfil og vil blive udført når du logger ind på systemet, og indeholder typisk opstartskommandoer, velkomst... Hvis '''.bash_profile''' ikke eksister i dit hjemmebibliotek vil '''bash''' kigge efter filen '''.bash_login''' og udføre den. Hvis denne heller ikke eksister kigger '''bash''' efter filen '''.profile''' og udfører kommandoerne i den. Bemærk kun en af disse filer vil blive udført i rækkefølgen: 1: '''.bash_profile''' 2: '''.bash_login''' eller 3: '''.profile'''
 +
|-
 +
|valign=top|'''$HOME/.bashrc'''
 +
|Denne fil er personlig og vil blive udført hvergang der startes en '''sub-shell''', det vil sige hvergang '''bash''' starter en ny
 +
'''bash'''
 +
|-
 +
|valign=top|'''$HOME/.bash_logout'''
 +
|Denne fil er din personlig afslutningsfil og udføres når der logges ud.
 +
|-
 +
|valign=top|'''$HOME/.inputrc'''
 +
|Denne fil indeholder opstartskommandoer til '''bash'''. Anvendes til for eksempel at ændre tastatur genveje.
 +
|}
 +
 +
= Online bash hjælp =
 +
*On line manualen: '''man bash'''
 +
*indbygget bash hjælp: '''help'''
 +
*hjælp til bash indbyggede kommandoer: '''help while''' (eksempel)
 +
= bash tilpasning med set kommandoen =
 +
Hvis du ønsker at ændre bash måde at fungere på kan '''set''' kommandoen anvendes. Dette er normalt ikke nødvendigt.
 +
*Kommandoer
 +
**help set
 +
== Debugging scripts ==
 +
Det kan være svært at debugge scripts og se hvor problemet er. Her kan bash sættes i enten ''verbose'' eller '''trace''' mode. '''Verbose''' eller '''trace''' mode kan slås til og fra efter behag i dit script.
 +
 +
*verbose mode. (Viser kommandoer som de '''læses''' fra scriptet. Som de er skrevet)
 +
**Brug enten '''set -v''' eller '''set -o verbose''' for at aktivere verbose mode
 +
**Brug enten '''set +v''' eller '''set +o verbose''' for at de-aktivere verbose mode
 +
*trace mode.  (Viser kommandoer som de '''udføres''' i scriptet. Fx. indholdet af variablerne.
 +
**Brug enten '''set -x''' eller '''set -o xtrace''' for at aktivere trace mode
 +
**Brug enten '''set +x''' eller '''set +o xtrace''' for at de-aktivere trace mode
 +
 +
<source lang=bash>
 +
#!/bin/bash
 +
#Kode her er OK
 +
...
 +
set -x    #bash trace mode slået til og alle kommandoer udført vises på skærmen
 +
#mistænkelig kode her
 +
...
 +
set +x  #bash trace mode slået fra og bash fungerer normalt
 +
#kode her er ok
 +
...
 +
</source>
 +
===En anden måde at debugge scripts i bash===
 +
<source lang=bash>
 +
#!/bin/bash
 +
 +
trap '(read -p "[$BASH_SOURCE:$LINENO] $BASH_COMMAND?")' DEBUG
 +
 +
A=1
 +
while [ $A -lt 10 ]
 +
do
 +
        let A=A+1
 +
        echo -n "A = $A\n"
 +
done
 +
</source>
 +
 +
= Variable =
 +
Der er
 +
== Arrays ==
 +
Bash understøtter primitive Arrays.
 
<source lang=cli>
 
<source lang=cli>
[heth@mars ~]$ <input>whereis bash</input>
+
[heth@mars ~]$ <input>MYARRAY=(Banan Agurk Gulerod Radisse Kartoffel)</input>
bash: <notice>/usr/bin/bash</notice> /usr/local/man/man1/bash.1.gz /usr/ports/shells/bash
+
[heth@mars ~]$ <input>echo -e "En ${MYARRAY[3]} smager godt"</input>
 +
En Radisse smager godt
 +
[heth@mars ~]$ <input>echo -e ${MYARRAY[*]}</input>
 +
Banan Agurk Gulerod Radisse Kartoffel
 +
[heth@mars ~]$ <input>MYARRAY[3]=Citron</input>
 +
[heth@mars ~]$ <input>echo -e "En ${MYARRAY[3]} smager godt"</input>
 +
En Citron smager godt
 +
[heth@mars ~]$ <input>echo -e ${MYARRAY[*]}</input>
 +
Banan Agurk Gulerod Citron Kartoffel
 +
[heth@mars ~]$ <input>echo -e "Der er ${#MYARRAY[*]} elementer i arrayet "</input>
 +
Der er 6 elementer i arrayet
 +
[heth@mars ~]$ <input>echo -e "Element 1 fylder ${#MYARRAY[1]} tegn"</input>
 +
Element 1 fylder 5 tegn
 +
[heth@mars ~]$ <input>echo -e "${MYARRAY[*]}"</input>
 +
Banan Agurk Gulerod Citron Kartoffel
 +
[heth@mars ~]$ <input>unset MYARRAY[1]</input>
 +
[heth@mars ~]$ <input>echo -e "${MYARRAY[*]}"</input>
 +
Banan Gulerod Citron Kartoffel
 
</source>
 
</source>
 +
 +
 +
 +
{{Source cli}}
 +
 +
= Eksterne henvisninger =
 +
*[http://www.gnu.org/software/bash/ Bash projektets hjemmeside]
 +
*[http://www.gnu.org/software/bash/manual/bashref.pdf Bash reference manual]
 +
*[http://www.tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf Bash Beginners Guide]
 +
*[http://www.tldp.org/LDP/abs/abs-guide.pdf Advanced Bash-Scripting Guide]
 +
*[http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html Bash programming HOWTO Intro]
 +
[[Category:Linux]][[Category:Bash]][[Category:UNIX]][[Category:Linux Command]]

Latest revision as of 12:38, 21 November 2020

bash - eller Bourne Again Shell - er den mest benyttede shell eller kommandofortolker til Unix og Linux systemer i dag. Der findes andre shells end bash. For eksempel csh (C-Shell), ksh (Korn-Shell) og bsh (Bourne-Shell).

Bash kaldes ofte i engelsk litteratur for en CLI - Command Line Interpreter eller kommandofortolker på dansk.


Der findes flere artikler om bash indelt efter emner:

Filer

Selve programmet bash kan være installeret i forskellige biblioteker på forskellige systemer men findes oftest i /usr/bin biblioteket. På BSD Unix varianter findes bash ofte i /usr/local/bin. Hvis du ikke ved hvor din lokale bash findes kan den findes med whereis bash kommandoen.


/etc/profile Opstartsfil som bash udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil.
$HOME/.bash_profile Denne fil er din personlige opstartsfil og vil blive udført når du logger ind på systemet, og indeholder typisk opstartskommandoer, velkomst... Hvis .bash_profile ikke eksister i dit hjemmebibliotek vil bash kigge efter filen .bash_login og udføre den. Hvis denne heller ikke eksister kigger bash efter filen .profile og udfører kommandoerne i den. Bemærk kun en af disse filer vil blive udført i rækkefølgen: 1: .bash_profile 2: .bash_login eller 3: .profile
$HOME/.bashrc Denne fil er personlig og vil blive udført hvergang der startes en sub-shell, det vil sige hvergang bash starter en ny

bash

$HOME/.bash_logout Denne fil er din personlig afslutningsfil og udføres når der logges ud.
$HOME/.inputrc Denne fil indeholder opstartskommandoer til bash. Anvendes til for eksempel at ændre tastatur genveje.

Online bash hjælp

  • On line manualen: man bash
  • indbygget bash hjælp: help
  • hjælp til bash indbyggede kommandoer: help while (eksempel)

bash tilpasning med set kommandoen

Hvis du ønsker at ændre bash måde at fungere på kan set kommandoen anvendes. Dette er normalt ikke nødvendigt.

  • Kommandoer
    • help set

Debugging scripts

Det kan være svært at debugge scripts og se hvor problemet er. Her kan bash sættes i enten verbose eller trace mode. Verbose eller trace mode kan slås til og fra efter behag i dit script.

  • verbose mode. (Viser kommandoer som de læses fra scriptet. Som de er skrevet)
    • Brug enten set -v eller set -o verbose for at aktivere verbose mode
    • Brug enten set +v eller set +o verbose for at de-aktivere verbose mode
  • trace mode. (Viser kommandoer som de udføres i scriptet. Fx. indholdet af variablerne.
    • Brug enten set -x eller set -o xtrace for at aktivere trace mode
    • Brug enten set +x eller set +o xtrace for at de-aktivere trace mode
#!/bin/bash
#Kode her er OK
...
set -x    #bash trace mode slået til og alle kommandoer udført vises på skærmen
#mistænkelig kode her
...
set +x   #bash trace mode slået fra og bash fungerer normalt
#kode her er ok
...

En anden måde at debugge scripts i bash

#!/bin/bash

trap '(read -p "[$BASH_SOURCE:$LINENO] $BASH_COMMAND?")' DEBUG

A=1
while [ $A -lt 10 ]
do
        let A=A+1
        echo -n "A = $A\n"
done

Variable

Der er

Arrays

Bash understøtter primitive Arrays.

[heth@mars ~]$ <input>MYARRAY=(Banan Agurk Gulerod Radisse Kartoffel)</input>
[heth@mars ~]$ <input>echo -e "En ${MYARRAY[3]} smager godt"</input>
En Radisse smager godt
[heth@mars ~]$ <input>echo -e ${MYARRAY[*]}</input>
Banan Agurk Gulerod Radisse Kartoffel
[heth@mars ~]$ <input>MYARRAY[3]=Citron</input>
[heth@mars ~]$ <input>echo -e "En ${MYARRAY[3]} smager godt"</input>
En Citron smager godt
[heth@mars ~]$ <input>echo -e ${MYARRAY[*]}</input>
Banan Agurk Gulerod Citron Kartoffel
[heth@mars ~]$ <input>echo -e "Der er ${#MYARRAY[*]} elementer i arrayet "</input>
Der er 6 elementer i arrayet
[heth@mars ~]$ <input>echo -e "Element 1 fylder ${#MYARRAY[1]} tegn"</input>
Element 1 fylder 5 tegn
[heth@mars ~]$ <input>echo -e "${MYARRAY[*]}"</input>
Banan Agurk Gulerod Citron Kartoffel
[heth@mars ~]$ <input>unset MYARRAY[1]</input>
[heth@mars ~]$ <input>echo -e "${MYARRAY[*]}"</input>
Banan Gulerod Citron Kartoffel



Eksterne henvisninger