Shell Linux

1,611 views

Published on

Programacio Shell Linux

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,611
On SlideShare
0
From Embeds
0
Number of Embeds
22
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Shell Linux

  1. 1. UD11 Programació SHELL C1: Sistemes Operatius – part Linux Albert Treviño Bifet
  2. 2. UD11 Programació SHELL Continguts UD11: Variables i entorn Guions Shell Comandes: set, env, export, echo, read, shift, expr Seqüències d'escape Variables posicionals Estructures de control de fluxe Condicions, tests i codis de retorn Ordres de programació: test, if, case, while, until, for
  3. 3. Variables i entorn SHELL: programa interactiu que permet la comunicació entre l’usuari i el Kernel del sistema operatiu Linux/Unix. És algo més que una interfície interpret-traductor. Permet elaborar programes. SHELL: entorn de treball – interpret de comandes + llenguatge de programació El shell incorpora 2 zones de memòria per emmagatzemar variables: Àrea dades locals Entorn: variables globals export: variables locals variables globals (entorn)
  4. 4. Guions shell Definició Guions shell = scripts: són programes o col.lecions d’ordres que s’emmagatzemen en una arxiu i d’execució seqüencial. Comunicació interactiva: subministrar dades als programes i obtenir resultats d’aquests: read: lectura (scanf de ‘C’) echo: escriptura (printf de ‘C’)
  5. 5. Comandes set read env Shift export expr echo
  6. 6. set – env – export – = set: mostra la llista de variables locals definides. env: mostra la llista de variables inicials de l’entorn. Definides a .profile Exemples: PATH,MAIL,PS1,PS2,TERM,HOME,LOGNAME, … export: converteix les variables incloses com arguments en globals. Exemple: export A1 A2 nom Sense arguments, export mostra la llista de variables exportades. Ex.: export =: assigna un valor a una variable. No espais en blanc. Exemple: A=3; nom=Marta
  7. 7. echo - read echo: mostra en pantalla les cadenes de caràcters introduïdes com argument. Interpreta caràcters especials (*,$,,?,…). Per evitar-ho: ‘ ‘ : no interpreta res “ “ : nomès interpreta $, “, ‘, : elimina significat del següent caràcter (nomès un) read: permet la introducció de valors en un guió shell. Exemples: read varx vary varz
  8. 8. Seqüències d’escape Permet insertar codis especials en una línia echo c evita salt de línia n inserta un salt de línia f inserta un salt de pàgina t inserta un salt de tabulador v inserta un salt de tabulador vertical b codi de retrocès r codi de retorn de carro [intro] nnnn genera el codi ASCCI corresponent al nº octal nnnn
  9. 9. Variables posicionals Variables que adopten com a valors els arguments introduïts a continuació del guió-shell en la línia de comandes. $1 1er argument posicional $2 2n argument posicional … $9 9è argument posicional $0 nom del guió shell executat $# Nº de variables posicionals introduïts $* Tots els arguments menys $0 $@ Tots els arguments inclòs $0 $? codi retorn o error generat per la darrera ordre executada $$ Nº identificador de procès (PID) $! Nº PID del darrer procés background
  10. 10. shift Desplaça un lloc els valors dles paràmetres posicionals. Permet accès a paràmetres adicionals fora del $0 al $9. Elimina 1 paràmetre i renombra la resta $9 $8, $8 $7, $7 $6, …, $3 $2, $2 $1 $1 es perd Exemple: shift 2 (l’argument indica elements eliminats) echo $* shift 1 echo $1 $2 $3 shift 2 echo $1 $2 Executar ‘programa’ un dos tres quatre
  11. 11. expr: expressions aritmètiques Utilitat de càlcul aritmètic (nomès nombres sencers). Operacions bàsiques: + : suma. Ex: expr 3 + 2 - : resta. Ex: expr 5 - 2 * : producte. Ex: expr 6 * 4 / : divisió Ex: expr 12 / 3 %: residu Ex: expr 17 % 5 Els operadors han d’anar separats dels arguments per espais. L’ordre de prioritat de les operacions és: %, *, /, +, - Utilitzar ` ` per executar el càlcul abans assignació. Exemples
  12. 12. Condicions, tests i codis de retorn $? – codi d’error de la darrera ordre executada Utilitzat per la presa de decisions en ruptures de control Dos opcions: = 0 : O.K., l’odre s’executa amb èxit. diferent 0 : K.O., ha succeït algún error. En aquest cas, el nombre generat depen del tipus d’error. Exemple 1: cd echo $? Mostra per pantalla codi 0 = èxit Exemple 2: cp echo $? Mostra per pantalla el codi d’error ja que cp necessita arguments per a executar-se
  13. 13. test Avalua condicions i comparacions entre variables o constants. Tres possibilitats: Arguments numèrics Sintaxis: test $num1 –opció $num2 Opcions: -eq, -ne, -gt, -ge, -lt, -le Exemples: test $A –eq $B, test $A –le $B Arguments de cadena Sintaxis: test $cad1 –opció $cad2 o test –opcio $cad Opcions: =, !=, -z, -n Exemples: test $A = Marta, test –z $A Arguments arxius Sintaxis: test -opció nom_arxiu Opcions: -a, -s, -f, -d, -w, -r, -x. Exemples: test –a nom_arxiu , test ! –d nom_arxiu Poden combinar-se 2 test mitjançant –a (AND) –o (OR)
  14. 14. if if condicio if condicio then then bloc instruccions bloc instruccions fi elif condicio2 then bloc instruccions if condicio fi then bloc instruccions else bloc instruccions fi
  15. 15. while / until while condició do bloc instruccions done until condició do bloc instruccions done
  16. 16. case / for case expressió in patro1) bloc d’instruccions ;; patro2) bloc d’instruccions ;; patro3) bloc d’instruccions ;; … *) bloc d’instruccions ;; esac for variable in llista do bloc instruccions done
  17. 17. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (I) 1.- Visualitza el conjunt de variables locals definides amb la ordre set. Crea 2 variables A i B assignant les 'valors' Ana i Mari respectivament. Comprova que les noves variables s'han incorporat a l'entorn. 2.- Considera les variables A=Ana i B=Mari de l'activitat 1. Visualitza el contingut amb echo $A i echo $B. Crea un subshell amb la ordre sh (comprova-ho executant ps). Torna a visualitzar $A i $B. Torna a l shell anterior amb la comanda exit. Comprova que els valors de A i B tornen a ser accesibles. 3.- Exporta les variables A i B. Repeteix les accions de l'activitat 2 i comprova que e ls valors de A i B són accessibles des de qualsevol shell. 4.- Crea una variable N i assigna-li el valor 3. Arranca un nou shell amb sh. Reassigna el valor de N amb 4. Torna al shell pare amb exit. Quin és el valor de N? __________ 5.- Executa les següents ordres i analitza els resultats: 1. echo A B 2. echo $B ola 3. echo quot;$A $Bquot; 4. echo $A $B 5. echo $Bola 6. echo '$A $B' 7. echo $A$B 8. echo ${B}ola 9. echo $A $A 10. echo $B$A 11. echo ros$A 12. echo `$A $B` 1.- 2.- 3.- 4.- 5.- 6.- 7.- 8.- 9.- 10.- 11.- 12.- 6.- Afegeix a la variable A el contingut de la variable B i guarda el resultat a la variable C. Comprova-ho. 7.- Crea les variables A1=A A2=$A A3=quot;$Aquot; A4='$A' A5=$A i comprova els seus valors amb echo. 4
  18. 18. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (I) 8.- Descubreix el contingut-valor de les variables MAIL, PATH, TERM, PS1, PS2, HOME i LOGNAME. Aquestes variables solen crear-se en el programa /guió-shell d’accés al sistema .profile i exportades per al seu ús en tota la sessió. 9.- Consulta i anota el valor de PS1: _____________. Canvia la variable de sistema PS1 per quot;Mande...quot;. Prem [Intro] varies vegades o executa algun comanda. Reassigna a PS1 el seu valor original. 10.- Executa les comandes env, set i export i observa les diferències. 11.- Accedeix al contingut de l'arxiu .bash_profile i observa les variables definides i exportades. 12.- a) Executa les ordre clear, date, who i ls succesivament. b) Inclou les quatre ordre en una sola línea separant-les per punt i coma (;) c) Crea (amb cat > q) un arxiu q que contingui les quatre ordres esmentades (una en cada línea). Executa l'arxiu q amb la comanda sh q. 13.- Intenta executar la nova ordre q sense precedir-la de sh. Observa el missatge de sistema. Modifica l'atribut d'executable (comanda chmod u+x q o chmod 711 q). Repeteix ara l'acció anterior. 14.- Crea un arxiu- guió shell amb el nom salutacions que contingui l'ordre echo $1. Executa-la amb els següents arguments: a) sh salutacions Carlos b) sh salutacions Lucia Marta c) sh salutacions quot;Lucia Martaquot; d) sh salutacions (sense arguments). a) c) c) d) 15.- Modifica l'arxiu salutacions de l'activitat 14 de la següent forma: echo hola $1 echo hola $2 echo hola $3 Executa-la amb els arguments Carlos Lucia Pablo Marta. Afegeix a salutacions les línees següents: echo El nom del guió és $0 echo El conjunt arguments és $* 4
  19. 19. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (I) 16.- Executa el guió shell de l'activitat 15 amb els arguments Carlos Lucia quot;Pablo Martaquot;. Analitza l'efec- te de les comilles dobles. 17.- Crea el següent guió shell i posa-li el nom de compte: echo quot;Número $1. Total $*quot; shift echo quot;Número $1. Total $*quot; shift echo quot;Número $1. Total $*quot; Executa'l amb la línea de comandes sh cuenta 1 2 3 4 5 18.- Es pot incloure en un guió shell més de 9 arguments en variables posicionals? 19.- Crea el següent guió shell Salutacions2: clear read nom echo Hola $nom Executa'l amb un sol argument, amb dos arguments separats per un espai i amb varis arguments agrupats entre comilles dobles. Quina diferència hi ha? 20.- Executa les següents operacions aritmètiques amb l'ordre expr: 1. 3 + 2 2. 3+2+5 3. 3+5-2 4. 3 * 5 5. 17 * 6 6. 3+2*5 7. 12 / 4 8. 4*8/2 9. 4*7/2 10. 7 * 4 / 2 11. 8/2*4 12. 7/2*4 Escriu el resultat al costat... 21.- Executa les següents operacions aritmètiques amb l'ordre expr: 1. 8 / 2 2. 8 % 2 3. 17 / 3 4. 17 % 3 1 2 3 4 22.- Crea les variables I=2 , J=3. Amb la comanda expr assigna a la variable K la suma de I i J i incre- menta en 1 el valor de I. Comprova-ho. 4
  20. 20. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (I) 23.- La comanda expr no admet parèntesi per alterar la prioritat de les operacions. Com calcularies (3+5)/2? ____________________ 4
  21. 21. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (II) 1.-Troba el valor de la variable $? de retorn de codi d’error desprès executar les següents ordres: 1. pwd 2. pepe 3. cd 4. cat /etc/passwd 5. cd /;mkdir mnio 6. cd /:cat > intento 7. cat 8. true 9. false 10. true;false 11. false;true 1.- 2.- 3.- 4.- 5.- 6.- 7.- 8.- 9.- 10.- 11.- 2.- Crea el següent guió shell: cat > prueba.error echo “Resultat expressió” expr $1 + $2 echo “Codi retorn error” echo $? [Ctrl + d] a) Executa-ho sense precedir-ho per sh i sense asignar-li l’atribut d’executable. b) Amb arguments 3 i 2 c) Sense arguments d) Amb arguments –1 i 5 e) Amb arguments 3.5 i 2.3. (decimals) f) Amb arguments 3, 3 i 7 3.- Asigna a les variables $A i $N els valors A=Marta i N=3. Quin serà el resultat dels següents test? a) test $A=Marta _________ b) test $A – eq Marta _________ c) test $N –eq 3 _________ d) test “$N” = “3” _________ e) test “$N” –eq `expr 2 + 1` _________ f) test “$N” –eq “expr 2 + 1” _________ 4.- Siguin les variables N1=3,5, N2=3,2, N3=” 4”, i N4=004. Quin serà el resultat dels següents test? a) test $N1 –gt $N2 _________ b) test $N1 –le $N2 _________ c) test $N3 –eq $N4 _________ 1
  22. 22. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (II) d) test $N3 = $N4 _________ 5.- Sigui A1 una variable buida. Quin serà el resultat dels següents test? a) test –z $A1 b) test –z “$A1” c) test –n $A1 d) test –n “$A1” e) test ! –n $A1 f) test ! –n “$A1” g) test $A1 –eq 0 h) test “$A1” –eq 0 i) test $A1 = “” j) test “$A1” = “” k) test x$A1 = x l) test “x$A1” = “x” a) b) c) d) e) f) g) h) i) j) k) l) 2
  23. 23. ACTIVITATS C1 – LINUX PROGRAMACIÓ SHELL (III) 1.- Realitza un programa PREGUNTA que mostri per pantalla la pregunta: “Qui va descubrir Amèrica?” i segons la resposta mostri el missatge “és correcte” o “no és correcte”. 2.- Realitza una segona versió del programa ‘pregunta’ – PREGUNTA2 – amb la construcció ‘case’. 3.- CITA a cegues! Simula una conversa de Chat en la que es pregunti si tens parella i en funció reposta, s’organitzarà la cita a cegues o no. 4.- És Hector igual a Carlos? Fes un sript que utilitzant la variable de sistema $?, retorni la resposta a aquesta pregunta, confusió habi- tual del vostre estimat tutor. 5.- VOLS MÉS? Fes un sript que fins que l’usuari digui prou, va introduint dades al sistema. 6.- Fes un programa DIVIS que comprovi si dos nombres son divisibles o on. 7.- Realitza un guió shell CALCULS que sol.liciti 3 nombres i mostri la suma acumulada, el producte acu- mulada i el valor mig. 8.- Proposa un programa IGUAL que comprovi si l’argument introduït és el carácter “=”. 9.- Fes un script NUM1 que sol.liciti reiteradament l’etnrda de nombres i els mostri per pantalla fins que s’introdueixi un nombre negatiu. Utlitza la construcció while o bé la construcció until. 10.- Elabora un programa OPCIONS que sol.liciti una elecció entre tres opcions A, B i C i mostri el missat- ge “primera”, “segona”, “tercera” o “elecció incorrecta” segons el cas. 1
  24. 24. PRÀCTICA FINAL C1 – LINUX PROGRAMACIÓ SHELL 1.- Elabora un guió shell que sol.liciti dos nombre enters (preu i quantitat) i que mostri l'import total apli- cant un IVA del 16% (sense tenir en compte decimals: ‘* 116 / 100) El programa ha de mostrar un missatge de sol.licitud per a cada dada. 2.- Elabora un guió shell que sol.liciti 6 números i mostri el resto de dividir la suma dels 6 números entre 28. Un algorisme similar s'utilitza per afegir al nombre del DNI una de les 28 lletres de l'abecedari per constituir el NIF. 3.- Realitza un programa NOTA que sol.liciti un nombre i si és major que 10 mostri el missatge: “nota massa gran” i si és menor que 0, mostri el missatge “nota massa baixa”. 4.- Un trajecte en tren costa 17 euros. Elabora un programa BITLLET que pregunti si es vol un bitllet d’anada i tornada i en aquest cas efectua un descompte del 20% sobre el preu de doble trajecte (`expr $import *2 *80 / 100`). Treu per pantalla l’import total. 5.- Crea un programa PARSENAR que sol.liciti un nombre i digui per pantalla si és parell o senar. 6.- Construeix un programa COMPROB que sol.liciti un nombre i comprovi si figura en un arxiu anomenat LLISTA (utilitza l’ordre grep i la variable $?). 7.- Elabora un programa SINDATO que detecti si s’ha introduït o no un argument posicional (variable posicional $#) y que retorni el nombre d’arguments introduïts. 8.- Realitza un programa MINOR que sol.liciti dos nombres i mostri el més petit. 9.- Realitza un programa BARRA que mostri en pantalla una línia amb tants asterisc (*) com indiqui el nombre introduït com argument en l’execució ‘sh BARRA nº’. 10.- Construeix un programa TAULES que mostri en pantalla les taules de multiplicar dels nombres 1 fins a 10. Mostra cada taula desprès de netejar la pantalla i introdueix un temporalitzador de 3 segons entre taula i taula (sleep 3). Utilitza dos construccions until anidades o construccions while. Pot fer-se de les dues maneres. 1
  25. 25. PRÀCTICA FINAL C1 – LINUX PROGRAMACIÓ SHELL 11.- Fer un programa MATRICULA que sol·liciti les dades de matrícula en un determinat centre que ofer- ta cursos amb les següents característiques: NIVELL DEPARTAMENT SECCIÓ Diplomat: Administració: Personal Clients Gestió: Ventes Producció Master: Direcció: Personal Fabricació Investigació: Anàlisis Desenvolupament El programa ha de sol·licitar el NIVELL, DEPARTAMENT i SECCIÓ desitjats mostrant les opcions corres- ponents segons les eleccions successives. L’alumne per tant, ha d’informar al centre del seu nivell aca- dèmic i del Dept. – Secció on vol realitzar el curs. 12.- Construeix un programa AGENDA que permeti mitjançant un menú el manteniment d’un petit arxiu LLISTA amb el nom, direcció i telèfon de varis persones. Inclou les opcions: afegir (afegir un registre) buscar (buscar entrades per nom, direcció o telèfon) llistar (visualitzar tot l’arxiu) ordenar (ordenar els registres alfabèticament) eliminar (eliminar l’arxiu) 2

×