www.mamboteam.com
aptitude : me and my debian - a work in progress  
2008-07-09
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
BadVista
BASH Forum
Välkommen, Gäst
Vänligen Logga in eller Registrera.
Glömt ditt lösenord?
Bash och databas (1 läser)
Ned Svara på det här inlägget Favoriserade: 0
ÄMNE: Bash och databas
#36
marwal (Moderator)
Moderator
Inlägg: 27
graphgraph
Användare Offline Klicka här för att se användarens profil
Bash och databas 2007-08-03 22:20 Karma: 0  


Här är ett exempel på hur BASH kan interagera med en databas.
Applikationen är en enkel telefonbok där det går att lägga till poster samt att söka bland dem.
Det är sqlite3 som används och för att köra exemplet måste du också ha dialog installerat.
Code:

 ~$ sudo aptitude install dialog sqlite3


BASH-koden kräver en databas som heter tel.db och den skapas såhär :
Code:

 ~$ sqlite3 tel.db create table tel (id INTEGER PRIMARY KEYnamn TEXTtel TEXT); .quit



(Sqlite saknar funktionen AUTOINCREMENT, men inkrementerar 'id' automatiskt om det anges som NULL).

Gör sedan BASH-koden exekverbar (förutsätter att du sparat koden som 'tel.sh' :
Code:

 ~$ chmod u+x tel.sh



Starta programmet :
Code:

 ~$ ./tel.sh



Koden är ganska löst skriven och saknar en del i gränsnittet samt i funktionalitet - bl. a. finns ingen funktion för att editera lagrade poster. Men det går utmärkt att bygga vidare på eller kanske skapa en helt annan databasdriven lösning.

Code:

 #!/bin/bash TMP=$(mktemp /tmp/tmp.XXXXXXXX) DB=tel.db function sp() {     dialog --inputbox "$1" 8 60 2>$TMP     RET=$?     PATT=$(cat $TMP) } # LÄGG TILL I ADRESSBOK function add() {     sp 'Ange namn:'          # Hantera Cancel (gå till huvudmeny)     (($RET)) && break     NAMN=$PATT          sp 'Ange telefonnummer:'     TEL=$PATT     sqlite3 $DB "insert into tel values (NULL,'$NAMN','$TEL')"     dialog --msgbox "Tillagd:\n$NAMN: $TEL" 8 60 } # SÖK I ADRESSBOK function search() {     sp 'Ange sökterm:'     # Hantera Cancel (gå till huvudmeny)     (($RET)) && break     HITS=$(sqlite3 $DB \ "select * from tel where namn like '%$PATT%'" \ tr ' ' '_')     pstr=""     for HIT in $HITS; do     HIT=$(echo $HIT tr '|' ' '); HIT=($HIT)     ID=${HIT[0]}     NAMN=${HIT[1]}     TEL=${HIT[2]}     #pstr="$pstr $ID \"$NAMN $TEL\""     pstr="$pstr $ID \"$NAMN\""     done     dialog --menu 'Välj namn' 16 40 10 $pstr 2>$TMP     ID=$(cat $TMP)     HITS=$(sqlite3 $DB "select tel from tel where id = $ID")     dialog --msgbox "$HITS" 8 60 } # huvudmeny while [ ]; do     dialog --menu 'Välj funktion' 16 40 10 \ 1 'Sök i adressbok' \ 2 'Lägg till i adressbok' 2>$TMP     # Hantera Cancel (avsluta)     (($?)) && exit     IDD=$(cat $TMP)     case $IDD in     1)     while [ ]; do         search     done     ;;     2)     while [ ]; do         add     done     ;;     esac done



Inlägg ändrat av marwal, den 2007-08-05 18:34
  Logga in för att svara.
Upp Svara på det här inlägget
Powered by FireBoard
 
Top! Top!