Difference between revisions of "Bash"

From Teknologisk videncenter
Jump to: navigation, search
m (debugging scripts)
m (Debugging scripts)
 
(44 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.
  
*'''/etc/profile'''
+
 
**Opstartsfil som '''bash''' udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil.  
+
{|
*'''$HOME/.bash_profile'''
+
|valign=top|'''/etc/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'''
+
|Opstartsfil som '''bash''' udfører for alle brugere på maskinen. Udføres før den personlige opstartsfil.  
*'''$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_profile'''
*'''$HOME/.bash_logout'''
+
|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 personlig afslutningsfil og udføres når der logges ud.
+
|-
*'''$HOME/.inputrc'''
+
|valign=top|'''$HOME/.bashrc'''  
**Denne fil indeholder opstartskommandoer til '''bash'''. Anvendes til for eksempel at ændre tastatur genveje.
+
|Denne fil er personlig og vil blive udført hvergang der startes en '''sub-shell''', det vil sige hvergang '''bash''' starter en ny  
== Online bash hjælp ==
+
'''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'''
 
*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 ==
+
= 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 ===
+
== 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 35: Line 52:
  
 
<source lang=bash>
 
<source lang=bash>
#!/usr/bin/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>
==
+
===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>
 +
[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 ==
+
= 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:

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