[Bourne Shell]
[Pagina anterioara][Pagina continut][Pagina urmatoare]

Comenzi inglobate


Introducere


Comenzile inglobate sau interne (built-in commands) sunt comenzi ce pot fi apelate din interiorul unui shellscript sau de la linia de comanda. Shell-ul are 32 de comenzi inglobate. Fiecare comanda ce este executata returneaza un exit-code. Atunci cand comanda nu se termina pe o singura linie, shell-ul prompteaza (al doilea prompter este >) utilizatorul pentru introducerea caracterelor de continuare pana cand se incheie comanda.
	Exemplu:
		$for i in f1 f2
		>do
		>file $i
		>done
		$ 
	

getopts


Exista posibilitatea ca un shellscript sa fie apelat cu optiuni. Daca un shellscript denumit test.cmd are urmatoarea sintaxa: test.cmd [-a] [-b] [-c], atunci el poate fi apelat in oricare dintre modalitatile urmatoare:
		test.cmd -a
		test.cmd -abc
		test.cmd 
		test.cmd -a -b
		test.cmd -a -b -c
		
		...s.a.m.d
	
In acest caz vom folosi getopts in interiorul uneia dintre instructiunile for, while sau until. getopts returneaza "true" atata timp cat exista optiuni ce trebuie luate in considerare. Formatul general este:
getopts <optiuni> <variabila>
		Exemplu. Fie shellscript-ul test.cmd:
		
			# test.cmd
			...
			while getopts abc optiune
			do
			...
			done
		
Care este modalitatea de lucru a lui getopts ? Spre exemplu, daca apelul s-a facut test.cmd -abc, comanda getopts verifica prima data daca exista o liniuta (-) in linia de comanda. Verifica apoi daca litera ce urmeaza este una dintre optiunile valide daca optiunea este valida, atunci ea este memorata in variabila optiune. In acest moment este returnat un exit status zero, deci corpul ciclului while este executat. Optiunile urmatoare sunt tratate in mod asemanator. Atunci cand se epuizeaza toate optiunile, getopts returneaza o valoare diferita de zero si astfel ciclul while se incheie.
In cazul aparitiei unei optiuni invalide, spre exemplu se face apelul test.cmd -abcd, optiunile corecte sunt tratate ca mai sus, iar optiunea invalida d este considerata si ea de getopts deoarece face parte din grupul precedat de -. In acest caz, getopts ia valoarea ?, apoi returneaza un exit status zero si corpul ciclului while este executat. Shellscript-ul va contine cod corespunzator pentru fiecare optiune valida. Un exemplu ar putea fi acela construit cu un case:
			while getopts abc optiune
			do
				case "$optiune" in 
					a) ...;;
					b) ...;;
					c) ...;;
					\?) echo "Optiune invalida..."
				esac
			...
			done
	
Fie un nou shellscript, cu urmatorul format:
test2.cmd [-a] [-b] [-c] infocib
Optiunile a,b si c sunt tratate ca mai inainte iar getopts intoarce o valoare diferita de zero deoarece argumentul infocib nu este o optiune. Ciclul se termina drept rezultat al aparitiei unei valori false (diferita de zero) iar argumentul infocib este luat in considerare in continuare, dupa ciclul getopts.
Fie acum cazul in care o optiune necesita si o valoare ce trebuie specificata. Fie shellscript-ul test3.cmd [-a] [-b argument] <nume_fisier>
Comanda getopts devine: geopts ab: optiune, unde aparitia semnului : inseamna ca aceasta optiune trebuie urmata de cel putin un caracter whitespace si de un argument. Argumentul va fi memorat intr-o variabila speciala numita OPTARG. Daca linia de comanda contine -b fara nici un argument in continuare, in variabila optiune este memorat un ?. O alta variabila speciala, numita OPTIND este incrementata de fiecare data cand getopts returneaza o valoare. Ea are initial valoarea 1. Se poate verifica in acest mod daca a fost introdus argumentul specificat pentru executia corecta a comenzii. Astfel, in apelul test3.cmd -a -b nume infocib
, daca valoarea lui OPTIND este mai mare decat valoarea lui $# atunci numele fisierului <nume_fis> pentru executia corecta a scriptului nu a fost introdus.

hash


Este folosita pentru marirea vitezei primirii comenzilor.
Comanda hash [-r] <comenzi>
"spune" shell-ului sa caute comanda sau comenzile specificate si sa adauge directorul incare sunt localizate la "lista hash". Spre exemplu, odata executata comanda hash inter, urmatoarele apeluri catre shellscript-ul inter ce vor executa cu viteza mai mare. Daca folosim hash fara nici un argument, se va afisa o lista cu comenzi ce sunt deja in lista hash. Optiunea -r se foloseste atunci cand dorim stergerea din lista a unei comenzi.
hash -r sterge toate componentele listei.
Comanda hash fara nici un argument afiseaza toate componentele listei.

type sh


Afiseaza informatii despre comanda sau comenzile specificate, avand sintaxa:
type <comenzi>
Poate fi folosita impreuna cu:
  • comenzi interne
  • comenzi Unix
  • shellscript-uri
  • functii

    newgrp


    Modifica pentru un utilizator Unix identificatorul de grup (group_id). Are sintaxa:
    newgrp [<nume_grup>]
    Presupunand ca grupul utilizatorului este cibernetica si trebuie schimbat in comert, comanda este:
    		newgrp comert
    	
    Pentru motive legate de securitatea sistemjului, modificarea este permisa doar daca utilizatorul apare in lista membrilor grupului comert din fisierul /etc/group. Cu ajutorul acestei modificari, utilizatorul poate accesa programe disponibile grupului comert.

    ulimit


    Dimensiunea fisierului pe care un proces copil il poate scrie este limitata de un anumit numar de blocuri folosind comanda ulimit. Sintaxa acesteia este:
    ulimit [<dimens_fisier>]
    Pentru a afla setarea curenta, introducem pur si simplu comanda fara nici un argument. Utilizatorul obisnuit poate micsora dimensiunea; doar root poate creste aceasta dimensiune.

    umask


    Determina drepturile de acces implicite (default mask). Acestea sunt create folosind valori octale. Pentru un fisier obisnuit, drepturile de acces deplin sunt:
    -rw-rw-rw-
    cu valoarea octala a reprezentarii 666. Dreptul de acces pentru un anumit fisier se obtine scazand din 666 valoarea lui umask. In general, valoarea lui umask este setata de root la valoarea octala 022. se obtine deci valoarea 666-022=644, care reprezinta drepturile:
    -rw-r--r--
    Daca dorim drepturi depline de acces, vom seta umask la valoarea 0, prin comanda umask 0. Pentru un director, drepturile depline de acces sunt:
    -rwxrwxrwx (777 in octal)
    Dreptul x (de executie) pentru un director ofera utilizatorului dreptul de citire. Astfel, dreptul de acces la director se obtine scazand din 777 valoarea lui umask: 777-022=755, care reprezinta drepturile:
    -rw-r-xr-x

    times


    Aceasta comanda se foloseste pentru afisarea de catre shell a timpului necesitat de toate procesele rulate de shell. Sunt listate atat timpul utuilizator cat si cel sistem. Fie exemplul:
     
    			$times
    			0m30s 3m30s
    		
    Primul timp reprezinta 30 de secunde petrecute in mod utilizator iar cel de-al doilea timp este timpul ce a fost alocat proceselor sistem.

    eval


    Comanda eval asigura evaluarea completa a unei variabile. Fie exemplul:
    		$dir_curent='$pwd'
    		$echo $dir_curent
    			$pwd
    		
    		in cazul lui eval avem:	
    		
    		$eval $dir_curent
    		/home/stud/an3/i97zzz
    		
    	
  • [Pagina anterioara] [Pagina continut] [Pagina urmatoare]