LPI 1.05 Marcel Nijenhof
Agenda ● Customize and use the shell environment ● Customize or write simple scripts ● SQL data management
● Customize and use the shell environment ● Omgaan met variabele ● Export/set/unset ● Aliasen en functies ● Meerdere commando's op een regel
Omgaan met variabele ● Waarde geven ● VAR=test ● export VAR ● Export VAR=test ● Gebruik ● b.v – echo $VAR – Echo ${VAR}
Gevorderd gebruik ● Op passen met einde ● VAR=mijn echo ${VAR}test echo $VARtest ● Manipulaties tijdens gebruik ● echo ${NIET:-niet} NIET=wel echo ${NIET:-nietl} ● Veel meer mogelijk
export ● Waarom exporteren ● Maak het “test_script”: #!/bin/sh echo ${test_var} ●./test_script ● test_var=Yep./test_script ● export test_var./test_script
Welke variabele zijn er? ● Geporteerde variabele ● env – HOME=/home/marceln – SHELL=/bin/sh –... ● Alle variabele & functies ● set
set & status shell ● Aanpassen gedrag shell via set ● Debuging: set -x ● Stoppen met fouten: set -e ● Niet uitvoeren: set -n ● Gebruik van vi editing command line: set -o vi ● Globbing uit setten: set -o noglob ● Nog veel meer
Variabele & functies verwijderen ● unset VAR ● unset function ● Login scripten ● Functies en aliases
Login & Opstarten shell & afsluiten ● Inloggen ● /etc/profile ● ~/.bash_profile ● ~/.profile ● Opstarten ● ~/.bashrc ● Uit loggen ● ~/.bash_logout
aliases ● Een verwijzing na een commando ● alias ll='ls -latr' – ll --> ls -latr – ll *txt --> ls -latr *txt ● Aliases hebben geen eigen logica ● Vervaning van alias door de string van de alias ● Goed bruikbaar: – voor vaak gebruikte opties – Lange commando's
functions ● Functies zijn ● stukjes shell code – Bevatten logica (shell script) ● Hebben een argument lijst ● Je kunt aliases door functies vervangen ● Andere afhandeling argumenten ● Anders om kan niet
Voorbeeld ll functie ● Alias ● alias ll='ls -latr' ● Functie ll ● ll() { ls -latr } ● Zie het verschil in het afhandelen van de argumenten
Voorbeeld functie argumenten ● E() { echo ARGS: $# echo LIST: echo 0: $0 echo 1: $1 echo 2: $2 } ● B.v. E a b c d e
Meerdere commando's ● Serie van commando's ● echo 1; echo 2; echo 3 ● Bij goed resultaat (return 0) tweede commando ● true && echo Ja false && echo ja ● Bij fout resultaat (return != ) tweede commando ● true || echo Ja false || echo ja
Customize or write simple scripts ● Inleiding ● Voorbeeld scripts met argument lijsten ● For loop ● While loop ● If then else fi ● Case statement ● Password generator ● Shoot your self in the foot
Inleiding shell scripting ● Shell scripten zijn de lijm van een unix systeem ● Opstart scripten ● Batch jobs ● Automatisering van reeksen van commando's ● Eenvoudige cgi scripten
Shell script 1 ● #!/bin/sh echo ARGS: $# echo LIST: set -x echo 0: $0 echo 1: $1 echo 2: $2
Shell script 2 ● #!/bin/sh echo ARGS: $# echo LIST: for i in $(seq 1 $#) do echo ARG $i: $1 shift echo LIST: done ● Note: $(seq 1 $#) = `seq 1 $#` = $#
Shell script 3 ● #!/bin/sh echo ARGS: $# echo LIST: I=1 while [ "$1" ] do echo ARG $i: $1 i=$(($i+1)) shift done
Shell script 4 ● #!/bin/sh echo ARGS: $# echo LIST: I=1 for a in do echo ARG $i: $a i=$(($i+1)) ● done
Shell script 5 ● I=1 for a in do if [ $i != 5 ] then echo ARG $i: $a else echo Bestaat niet fi i=$(($i+1)) done
Shell script 6 I=1 for a in do case $a in a|b) echo $i: a of b ;; c|d|e) echo $i: c of d of e ;; f*|g*) echo $i: f\* of g\*: $a ;; *) echo $i: arg: $a ;; esac i=$(($i+1)) done
Wachtwoord generator #!/bin/sh S="ABC...XYZabc...xyz =_%" SL=$(echo $S | wc -c) LEN=8 if [ $1 ] then LEN=$1 fi for i in $(seq 1 $LEN) do PW=$PW${S:$(($RANDOM%$SL+1)):1} done echo ${PW}
Shoot in your foot? ● #!/bin/sh echo start kill -1 $$ echo end ● Maar in dit geval raak je wel meer!
SQL data management ● Inleiding sql ● Extensies ● sqlite3 ● Sql ● drop/create table/create index ● insert ● select ● update ● delete
Inleiding sql ● Diverse database engines ● Opensource – Sqlite – Mysql – Postgres ● Commercieel – Oracle – Sybase – Microsoft SQL Server ● Een taal voor alle databases
SQL & Extensies ● Sql is een iso standaard ● Alle databases supporten min of meer de standaard ● Alle databases kennen hun eigen extensies – Triggers – Functies ● Lpi kijkt alleen na de basis sql commando's ● Database onafhankelijk
Opensource databases ● Sqlite3 ● Filebased database (Geen server) ● Command line access interface ● Opstarten ● sqlite3 ● Voorbeelden zijn gemaakt met sqlite3 ● Werken ook in mysql ● Vermoedelijk ook in postgresql/oracle/sybase
drop/create tables ● drop table nl; drop table p; ● Zeker er van zijn dat de tabellen niet bestaan ● create table nl (i int, s varchar(255)); create table p (i int, p char(1), f varchar(255)); ● Creeer de nieuwe tabellen ● create index nl_idx on nl (i); create index p_idx on p (i); ● Creëer indexen om het zoeken te versnellen
Insert (nl) ● insert into nl values (1, "een"); insert into nl values (2, "twee"); insert into nl values (3, "drie"); insert into nl values (4, "vier"); insert into nl values (5, "vijf"); insert into nl values (8, "acht"); insert into nl values (11, "elf");
Insert (p) ● insert into p values (2, "y", "2"); insert into p values (3, "y", "3"); insert into p values (4, "n", "2^2"); insert into p values (5, "y", "5"); insert into p values (6, "n", "2*3"); insert into p values (7, "y", "7"); insert into p values (8, "n", "2^3"); insert into p values (9, "n", "3^2"); insert into p values (10, "n", "2*5");
select ● select * from nl; ● Laat alle elementen van nl zien ● select * from nl order by s; ● Laat alle elementen van nl gezien geordend op s ● select * from nl where i < 3; ● Laat alle elementen kleiner dan 3 zien
Select join ● select * from nl, p where p.i <4 and nl.i<3; ● Kruis product!: 1|een|2|y|2 1|een|3|y|3 2|twee|2|y|2 2|twee|3|y|3 ● In het algemeen niet zinnig
Join met conditie ● select nl.i, nl.s, p.p, p.f from nl JOIN p where nl.i = p.i; ● 2|twee|y|2 3|drie|y|3 4|vier|n|2^2 5|vijf|y|5 8|acht|n|2^3 ● Bij het getal staat nu de juiste factorisering. ● Waarde die niet gevonden worden in p ontbreken!
Left join ● select nl.i, nl.s, p.p, p.f from nl LEFT JOIN p on nl.i = p.i; ● 1|een|| 2|twee|y|2 3|drie|y|3 4|vier|n|2^2 5|vijf|y|5 8|acht|n|2^3 11|elf|| ● Ontbrekende waarde in p opgevuld met lege waarde (NULL).
Select met groep functie ● select p, count(p) from p group by p; ● Telt het aantal keer dat p voorkomt ● N|5 y|4 ● Ook met b.v. Sum, max, avg
Update/delete ● update nl set s="eight" where i=8; ● Maakt colum s van de rij met i=8 “eight” ● Zonder where statement worden alle rijen geupdate met deze waarde ● delete from nl where i=2; ● Verwijderd alle rijen uit nl waar i=2 ● Zonder where worden alle rijen verwijderd ● truncate table nl – Niet sqlite3
Vragen