User Tools

Site Tools


unixmix:capitole:capitol-08

Shell Scripting

Tutorial

One Liners

Aflați ce face comanda 'seq'.

  • Rulati seq 100.
  • Rulati seq 100 200.
  • Rulati seq 100 2 200.

Folosind comanda seq generați toate numerele de la 1000 de la 2000, din 10 în 10.

Comanda seq este de multe ori folosită împreună cu comanda for.

  • Creați directorul the_one_dir în home-ul vostru și întrati în el (mkdir ~/the_one_dir apoi cd !$).
  • Creați cu un one liner 100 de fișiere/directoare.
    • Numerele pare for fi directoare, numele impare vor fi fișiere.
  • Rulați liniile următoare în shell:
for i in $(seq 1 2 100); do
    touch $i
done

for i in $(seq 2 2 101); do
    mkdir $i
done

Folosiți if și condiții de test pentru a afișa care dintre fișierele din the_one_dir sunt fișiere normale și care directoare.

  • Rulați comenzile următoare:
for file in *; do
    if test -d "$file"; then 
         echo $file is a directory
    else 
         echo $file is a file
    fi
done

Shell scripts

Scrieți într-un editor următorul shell script cu numele my_first_script.sh simplu și rulați-l.

#!/bin/bash

echo "Hello world."
  • Rulați întăi comanda cu comanda bash my_first_script.sh.
  • Încercați, apoi, cu comanda ./my_first_script.sh.
  • Merge? De ce nu?
  • Adăugați drept de execuție și apoi rulați-l:
chmod u+x my_first_script.sh
./my_first_script.sh

Rulați următorul script (numit args_script.sh) ce necesită argumente la linia de comandă.

#!/bin/bash

echo $1
  • Adăugați drept de execuție.
  • Rulați scriptul prin ./args_script.sh Hello world.
  • Ce a afișat?
  • Rulați scriptul prin ./args_script.sh “Hello world”.
    • Aduceți-va aminte cum se făcea separarea argumentelor.
  • Rulați scriptul fără nici un parametru.

Îmbunătățiți scriptul pentru a afișa toate argumentele date.

  • Adăugați drept de execuție și rulați cu diverși parametri.
#!/bin/bash

echo $*

Îmbunătățiți scriptul pentru a se verifica că se primește cel puțin un parametru.

#!/bin/bash

if test $# -lt 1; then
   echo "Numar insuficient de parametri"
   exit 1
else
   echo $*
fi

Scrieți un script numit get_pid.sh care să afișeze PID procesului scriptului.

#!/bin/bash

echo My id is $$

Rulați scriptul în diverse moduri de mai multe ori:

  • source get_pid.sh
  • bash get_pid.sh
  • chmod +x; ./get_pid.sh
  • De ce atunci când este rulat cu source, de fiecare dată este același PID afișat?

Exerciții

  1. Scrieți și rulați un script bash numit args.sh care afișează:
    • numărul de argumente primite în linia de comandă
    • doar primele două argumente separate prin \ (backslash)
    • exemplu de rezultat afișat pentru apelul args.sh a b: numărul de parametri este 2: param1=a\param2=b
    • Ce se întamplă dacă scriptul primește mai puțin de două argumente?
  2. Folosiți comanda read a pentru a citi în variabila a o valoare.
    • Introduceți o valoare care conține TAB-uri. Încheiați cu ENTER.
    • Afișați valoarea variabilei a folosind echo $a și echo "$a"}.
  3. Scrieți și rulați un scrip shell numit mysum.sh care calculează suma a două numere transmise ca argumente.
  4. Creați un script numit age.sh care primește ca parametri: prenume, nume, anul nașterii, anul curent și afișează numele, prenumele și vârsta curentă.
    • Scrieți scriptul age.sh în mai multe variante, folosind:
      • 3 comenzi echo
      • 1 comandă echo
    • Exemplu de output pentru apelul ./age.sh gogu sclipici 1979 2009:
      Nume: sclipici
      Prenume: gogu
      Varsta: 30
unixmix/capitole/capitol-08.txt · Last modified: 2014/09/12 11:34 by razvan