Difference between revisions of "Bash"
m (→Filer) |
m (→Debugging scripts) |
||
(41 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. | ||
− | + | ||
+ | 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. | ||
{| | {| | ||
− | |'''/etc/profile''' | + | |valign=top|'''/etc/profile''' |
|Opstartsfil som '''bash''' udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil. | |Opstartsfil som '''bash''' udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil. | ||
|- | |- | ||
− | |'''$HOME/.bash_profile''' | + | |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''' | |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''' | + | |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 | |Denne fil er personlig og vil blive udført hvergang der startes en '''sub-shell''', det vil sige hvergang '''bash''' starter en ny | ||
'''bash''' | '''bash''' | ||
|- | |- | ||
− | |'''$HOME/.bash_logout''' | + | |valign=top|'''$HOME/.bash_logout''' |
|Denne fil er din personlig afslutningsfil og udføres når der logges ud. | |Denne fil er din personlig afslutningsfil og udføres når der logges ud. | ||
|- | |- | ||
− | |'''$HOME/.inputrc''' | + | |valign=top|'''$HOME/.inputrc''' |
|Denne fil indeholder opstartskommandoer til '''bash'''. Anvendes til for eksempel at ændre tastatur genveje. | |Denne fil indeholder opstartskommandoer til '''bash'''. Anvendes til for eksempel at ændre tastatur genveje. | ||
|} | |} | ||
− | + | = Online bash hjælp = | |
*On line manualen: '''man bash''' | *On line manualen: '''man bash''' | ||
*indbygget bash hjælp: '''help''' | *indbygget bash hjælp: '''help''' | ||
*hjælp til bash indbyggede kommandoer: '''help while''' (eksempel) | *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. | Hvis du ønsker at ændre bash måde at fungere på kan '''set''' kommandoen anvendes. Dette er normalt ikke nødvendigt. | ||
*Kommandoer | *Kommandoer | ||
**help set | **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. | 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. | ||
Line 44: | Line 52: | ||
<source lang=bash> | <source lang=bash> | ||
− | #! | + | #!/bin/bash |
− | |||
− | |||
#Kode her er OK | #Kode her er OK | ||
... | ... | ||
− | |||
set -x #bash trace mode slået til og alle kommandoer udført vises på skærmen | set -x #bash trace mode slået til og alle kommandoer udført vises på skærmen | ||
− | |||
− | |||
#mistænkelig kode her | #mistænkelig kode her | ||
... | ... | ||
− | |||
set +x #bash trace mode slået fra og bash fungerer normalt | set +x #bash trace mode slået fra og bash fungerer normalt | ||
− | |||
− | |||
#kode her er ok | #kode her er ok | ||
... | ... | ||
</source> | </source> | ||
− | == Variable | + | ===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 | Der er | ||
− | == | + | == Arrays == |
− | + | Bash understøtter primitive Arrays. | |
− | + | <source lang=cli> | |
− | + | [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 | ||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | {{Source cli}} | ||
− | + | = Eksterne henvisninger = | |
*[http://www.gnu.org/software/bash/ Bash projektets hjemmeside] | *[http://www.gnu.org/software/bash/ Bash projektets hjemmeside] | ||
*[http://www.gnu.org/software/bash/manual/bashref.pdf Bash reference manual] | *[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/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf Bash Beginners Guide] | ||
*[http://www.tldp.org/LDP/abs/abs-guide.pdf Advanced Bash-Scripting 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:
- 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/Linux Commands
Contents
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