10
Cursul 10 Shell scripting Utilizarea Sistemelor de Operare (USO) 16 decembrie 2016 Automatica si Calculatoare Cursul 10, Shell scripting 1/42 Moto Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems. Jamie Zawinski (JWZ) Automatica si Calculatoare Cursul 10, Shell scripting 2/42 Stocarea s , i prelucrarea datelor Automatica si Calculatoare Cursul 10, Shell scripting 3/42 Stocarea datelor http://www.quickmeme.com/p/3vzsz0 Automatica si Calculatoare Cursul 10, Shell scripting 4/42 Notes Notes Notes Notes

Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

  • Upload
    vodan

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Cursul 10Shell scripting

Utilizarea Sistemelor de Operare (USO)16 decembrie 2016

Automatica si Calculatoare Cursul 10, Shell scripting 1/42

Moto

Some people, when confronted with a problem, think “I know, I’lluse regular expressions.” Now they have two problems.

Jamie Zawinski (JWZ)

Automatica si Calculatoare Cursul 10, Shell scripting 2/42

Stocarea s, i prelucrarea datelor

Automatica si Calculatoare Cursul 10, Shell scripting 3/42

Stocarea datelor

http://www.quickmeme.com/p/3vzsz0

Automatica si Calculatoare Cursul 10, Shell scripting 4/42

Notes

Notes

Notes

Notes

Page 2: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Suport curs

I Suport (Introducere ın sisteme de operare)I Capitolul 12 – Shell scripting

I Sect, iunile 12.4, 12.5, 12.6, 12.9

I Regular Expressions CookbookI Capitolul 1 – Introduction to Regular ExpressionsI Capitolul 2 – Basic Regular Expression Skills

Automatica si Calculatoare Cursul 10, Shell scripting 5/42

Date tabelare

I linii (rows) s, i coloane (columns)

I exista un separator de campuri (de coloane): field separator

I separatorul de linii este caracterul newline (linie noua, \n)

I parsarea se refera ın general la ımpart, ireacampurilor/coloanelor de pe fiecare linie (splitting)

Automatica si Calculatoare Cursul 10, Shell scripting 7/42

Separatorul de campuri

I field separator sau field delimiter

I selecteaza coloane; o coloana este separata de alta prin fieldseparator

I poate fi un caracter (virgula, tab, spat, iu) sau un set decaractere (semne de punctuat, ie)

I utilitarele care fac split precizeaza caracterul sau setul decaractere pentru separare

I opt, iunea -d la cutI opt, iunea -F la awkI opt, iunea -s la sortI string.split() ın PythonI String.split() ın Java

Automatica si Calculatoare Cursul 10, Shell scripting 8/42

Splitting

I ımpart, irea unui format text/tabelar ın coloane

I de obicei sunt selectate anumite coloane

I apoi se pot executa operat, ii cu acele coloane

Automatica si Calculatoare Cursul 10, Shell scripting 9/42

Notes

Notes

Notes

Notes

Page 3: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Exemple de splitting ın shell

Extragerea numelui de utilizator s, i a directorului home

cut -d ’:’ -f 1,6 < /etc/passwd

awk -F ’:’ ’print $1, $6;’ < /etc/passwd

Automatica si Calculatoare Cursul 10, Shell scripting 10/42

One liner

I ınlant, uirea unor comenzi

I de obicei legate prin operatorul pipe (|)

I http://www.bashoneliners.com/

Automatica si Calculatoare Cursul 10, Shell scripting 12/42

Moduri de input pentru o comanda

I o comanda primes, te parametriI touch file1 file2 ...I zip -r my.zip path1 path2 ...I gcc -o exec obj1 obj2 ...

I folosite ın conjunct, ie cu operatorul de command epxansion:$(...)

I zip -r $(generic_command that outputs file names)

I o comanda primes, te input la intrarea standard (filtre de text)I gemeric_command | grep ’include’I generic_command | sort -t ’:’ -k 2I generic_command | sed ’s/ana/bogdan/g’

Automatica si Calculatoare Cursul 10, Shell scripting 13/42

Filtre de text

I All is text. (Unix)

I comenzi care ,,filtreaza” text

Sintaxa pentru filtre de text

filtru < input_file > output_file

command1 | filtru | command2

I operat, iiI selectare liniiI selectare coloane (dupa separator)I prelucrare linii (modificare elemente)I contabilizare

I cat, tac, rev, nl, head, tail, sort, grep, column, paste,join, sed, awk

Automatica si Calculatoare Cursul 10, Shell scripting 14/42

Notes

Notes

Notes

Notes

Page 4: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Ce este un script shell?

I o ıns, iruire de comenzi shell

I este interpretat de shell: se interpreteaza, pe rand, fiecarecomanda

I pe langa comenzi externe, sunt folosite s, i comenzi interneprecum if, for, while, case

I facilitat, i shell precum command expansion

I variabile

Automatica si Calculatoare Cursul 10, Shell scripting 15/42

Variabile

I server=141.85.224.218

I ssh -l root "$server"

I username="johnny"

I sudo useradd -m -d /home/"$username" -s /bin/bash

"$username"

I base_folder="/home/student/uso/scripts"

I zip -r scripts.zip "$base_folder"

Automatica si Calculatoare Cursul 10, Shell scripting 16/42

Shell scripting pentru prelucrarea datelor

I pentru one linere folosim, ın general, filtre de text

I pentru lucruri mai ample folosim while read; pentru lucrurimai complexe awk s, i sed

I IFS: Input Field Separator

I while + read: sunt split campurile fiecarei linii s, i trecute ınvariabile

I variabilele pot fi apoi folosite ın shell

Automatica si Calculatoare Cursul 10, Shell scripting 17/42

Construct, ia while read

Extragerea numelui de utilizator s, i a directorului home

IFS=":"; while read user x y z t home v; do echo "$user:$home";

done < /etc/passwd

Selectarea dupa o nota

IFS=$’t’; while read student group grade; do if test grade -ge 7; then

echo "$student,$grade"; fi; done < students.txt

Automatica si Calculatoare Cursul 10, Shell scripting 18/42

Notes

Notes

Notes

Notes

Page 5: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Construct, ia for

Parcurgerea fis, ierelor dintr-un director

for f in *; do

cat "$f"

done

Parcurgerea elementelor dintr-o lista

for group in "311CA" "312CA" "313CA" "314CA" "315CA"; do

no=(./get-students-in-group "$group") # custom script

echo "Group $group has $no students."

done

Parcurgerea utilizatorilor din sistem

for user in $(cut -d ’:’ -f 1); do

nlogins=$(last "$user" | grep "^$user" | wc -l)

echo "User $user logged in $nlogins times recently."

done

Automatica si Calculatoare Cursul 10, Shell scripting 19/42

Construct, ia if

Check if file exists

if test -f "$file"; then

echo "File $file exists."

fi

Check if number is between 1 and 5

if test "$num" -ge 1 -a "$num" -le 5; then

echo "$num is between 1 and 5."

else

echo "$num is not between 1 and 5."

fi

Check if proper number of arguments

if test "$#" -ne 1; then

echo "Usage: $0 argument"

echo "You must provide a single argument to the script."

exit 1

fi

Automatica si Calculatoare Cursul 10, Shell scripting 20/42

Utilizare

I regular expressions sau regex

I cautare (searching, pattern matching)

I validarea unui s, ir, a unui text, a unei intrari (numar detelefon, URL, nume de variabila, adresa MAC)

I substituirea unei expresii

Automatica si Calculatoare Cursul 10, Shell scripting 22/42

Exemple grep

Check if file exists

grep ’#include’

grep ’^include’

grep ’^[ ]*include’

grep ’^[ \t]*$’

Automatica si Calculatoare Cursul 10, Shell scripting 23/42

Notes

Notes

Notes

Notes

Page 6: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Probleme cu expresii regulate

http://xkcd.com/1171/

http://www.twoproblems.com/

Automatica si Calculatoare Cursul 10, Shell scripting 24/42

Cand sa nu foloses, ti expresii regulate

I cand exista parsere

I cand exista aplicat, ii, tool-uri, funct, ii mai bune pentru a faceacest lucru

I pentru anumite tipuri de date (adrese de e-mail, HTML): fienu se poate, fie e foarte greu, fie va ies, i o “aratare” de cod

I atunci cand, folosite abuziv, fac codul nementenabil/nelizibil

Automatica si Calculatoare Cursul 10, Shell scripting 25/42

Exemple de expresii regulate

Expresie regulata Explicat, ie

[_a-zA-Z][_0-9a-zA-Z]* nume de variabila/funct, ie

07[:digit:]{8} numar de telefon

[:upper:][:alpha:]+ numele unei persoane

[:digit:]{2}\.(pdf|png|svg) nume fis, iere din doua cifre s, i diferite extensii

([01][:digit:]|2[0-3]):[0-5][:digit:] timp ın ore s, i minute

^[:upper:]{1,10}$ linii cont, inand maxim 10 majuscule

Automatica si Calculatoare Cursul 10, Shell scripting 26/42

Metacaractere ın expresii regulate

Metacaracter Efect

^ (caret) ınceput de linie

$ (dollar) sfars, it de linie

. (dot) orice caracter

[. . . ] (square brackets) set de caractere

? (question mark) expresia anterioara cel mult o data

* (star) expresia anteriora de oricate ori posibil niciodata

+ (plus) expresia anteriora de oricate ori cel put, in o data

e1|e2 (or) expresia de dinainte sau cea de dupa

Automatica si Calculatoare Cursul 10, Shell scripting 27/42

Notes

Notes

Notes

Notes

Page 7: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

regex vs. globbing

I globbing este folosit ın shell, ın special pentru filename expansion

I globbing poate fi considerat o forma mai slaba de expresie regulata

I expresiile regulate sunt puternice, cu mai multe cazuri de utilizare s, isuport ın majoritatea limbajelor/framework-urilor moderne

Metacaracter Rol ın globbing Rol ın regex

. nimic special orice caracter

[. . . ] set de caractere set de caractere

* orice caracter de oricate ori expresia anterioara de oricate ori

? orice caracter expresia anterioara o data sau niciodata

∼ directorul home nimic special

Automatica si Calculatoare Cursul 10, Shell scripting 28/42

Suport pentru expresii regulate

I utilitare shell: grep, awk, sed

I limbaje de programare: Perl, Python, PHP, Ruby, Java,JavaScript, C++11

I editoare: Vim, Emacs

I baze de date

I biblioteci cu suport de expresii regulate: Gnulib

Automatica si Calculatoare Cursul 10, Shell scripting 29/42

Utilizare shell scripting

I prelucrare de dateI task-uri simpleI quick’n’dirtyI se folosesc filtre de text: prelucreaza text (la intrare, s, i la

ies, ire): head, tail, grep, cut, tr, awk, sed

I automatizareI task-uri repetitiveI se pun comenzile ın cauza ıntr-un script shellI se ruleaza scriptul la nevoie

Automatica si Calculatoare Cursul 10, Shell scripting 31/42

Automatizare

I mai multe comenzi (eventual ınlant, uite)I e vorba de comenzi comune, nu neaparat (chiar foarte rar)

filtre de textI poate fi vorba de comenzi de prelucrare de imaginiI poate fi vorba de comenzi de procesare de fis, iere (din LATEXın

PDF)I poate fi vorba de descarcat fis, iere de la distant, a

I scriptul se ruleaza periodic sau la nevoie

I nu este obligatoriu sa folosit, i construct, ii precum for, whilesau if

I un script trebuie sa ıs, i faca treaba, nu trebuie sa fie limbaj deprogramare

I putet, i avea one linere ın script

Automatica si Calculatoare Cursul 10, Shell scripting 32/42

Notes

Notes

Notes

Notes

Page 8: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Mindset legat de shell scripting

I sa fie quick’n’dirty ; daca e prea complicat trebuie mers la unlimbaj de programare

I keep it simple: nu folosi expresii regulate sau construct, iicomplicate fara sa fie cazul; a.k.a. nu te lega la cap fara sa tedoara

I mintea la obiectiv: ce vreau sa obt, in?

I best tool for the best job

I foloses, te tot ce exista, nu reinventa roata, DRY: don’t repeatyourself

I documenteaza-te ın prealabil: masoara de doua ori si taie odata

I este posibil sa existe o comanda sau opt, iunea unei comenzicare sa faca (parte din) ceea ce dores, ti

I niciodata nu vei s, ti suficient de mult shell scripting:documenteaza-te, exerseaza s, i ımbunatat, este

Automatica si Calculatoare Cursul 10, Shell scripting 33/42

Sfaturi legate de shell scripting

I nu folositi shell scripting pentru ceea ce se face maibine/usor/eficient in Python, C, Java, Ruby, PHP etc.

I nu reinventat, i roata

I folosit, i ghilimele cand referit, i valoarea unei variabile

I folosit, i cea mai buna opt, iune (cut, grep, tr, awk, sed,while read) dupa nevoie

I folosit, i opt, iuni de tip expresii regulate sau similare ıntreapostrofuri

I http://mywiki.wooledge.org/BashFAQ

Automatica si Calculatoare Cursul 10, Shell scripting 34/42

Shell scripting

I doua cazuri de utilizare: prelucrare de date s, i automatizare dedate

I doua tipuri de input pentru comenzi: parametri s, i intrareastandard (filtre de text)

I keep it simple

I don’t repeat yourself

I expresille regulate pot sa ıncurce ın loc sa ajute

I nu este obligatoriu sa folosit, i for, while, if; shell scriptingnu e programare

Automatica si Calculatoare Cursul 10, Shell scripting 36/42

Regular Expressions Cookbook

I Jan Goyvaerts, Steven Levithan

I creatorii http://www.regular-expressions.info/,http://regexpal.com/

I 2nd Edition

I practica, multe ,,ret, ete”

I o recenzie aici: http://blog.codinghorror.com/

regular-expressions-for-regular-programmers/

Automatica si Calculatoare Cursul 10, Shell scripting 37/42

Notes

Notes

Notes

Notes

Page 9: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Larry Wall

http://en.wikipedia.org/wiki/File:Larry_Wall_YAPC_2007.jpg

I creatorul Perl

I BDFL pentru proiectul Perl

I autorul programului patch

I cas, tigator al International Obfuscated C Code Contest

Automatica si Calculatoare Cursul 10, Shell scripting 38/42

Rackspace

I companie de hosting IT

I fondata ın 1996

I unul dintre principalii furnizori de servicii cloud (RackspaceCloud)

I contribuitor la OpenStack

I folosit de GitHub

Automatica si Calculatoare Cursul 10, Shell scripting 39/42

Lua

I limbaj de programare de scripting

I paradigme multiple (la fel ca Python)

I proiectat pentru a fi us, or ıncorporat ın alte limbaje

I API C simplu

I limbaj de scripting pentru dezvoltatorii de jocuri

I folosit de limbajul de scripting al utilitarului nmap

I folosit pentru configurarea managerului de ferestre Awesome

Automatica si Calculatoare Cursul 10, Shell scripting 40/42

Cuvinte cheie

I splitting

I separator de campuri

I one liner

I filtru de text

I script shell

I IFS

I while read

I for

I if

I expresii regulate

I metacaractere

I globbing

I grep

I prelucrare de date

I automatizare

Automatica si Calculatoare Cursul 10, Shell scripting 41/42

Notes

Notes

Notes

Notes

Page 10: Cursul 10 - Shell scripting - swarm.cs.pub.roswarm.cs.pub.ro/~george/uso-ac/res/cursuri/curs-10-aut-ac-handout-4on1...Suport curs I Suport (Introducere ^ n sisteme de operare) I Capitolul

Resurse utile

I Jon Goyvaerts, Steven Levithan: Regular Expressions Cookbook

I http://www.regular-expressions.info/

I http://regexpal.com/

I http://www.regexr.com/

I http://www.twoproblems.com/

I http://koala.cs.pub.ro/training/wiki/medium-unix/home

I http://koala.cs.pub.ro/training/wiki/advanced-unix/home

Automatica si Calculatoare Cursul 10, Shell scripting 42/42

Notes

Notes

Notes

Notes