Ostatnie laboratorium dotyczyło uruchamiania programów z parametrami, oraz wszelkich zabaw z nimi razem wziętymi. Było też co nieco o tablicach oraz różnorakich działaniach algebraicznych. Z góry przepraszam za lekkie opóźnienie. W szczegóły przyczyny nie wnikajmy. Powiedzmy że tak miało być i tyle. Przejdźmy zatem do rzeczy.
EDIT: Przygotowałem tutaj małą ściągawkę, aby łatwiej można było zrozumieć materiał.
$0 - zerowy parametr, pokazuje nazwę skryptu, oraz powłokę z której korzysta.
$1 $2 ... $9 - parametry programu od 1 do 9.
$@ - wypisuje wszystkie parametry programu.
$# - wypisuje ilość wszystkich parametrów programu.
$$ - PID programu (Process ID): to taki numer identyfikacyjny.
$? - wykonuje ponownie ostatnie polecenie.
Przyznaję że sam zanim zrozumiałem na czym polega używanie parametrów, to trochę się pomęczyłem. Aby ułatwić sobie zrozumienie proponuję zrobić przykładowy skrypt wymyślone przeze mnie.
#!/bin/bash
echo "Twoj pierwszy parametr to $1"
echo "Twoj drugi parametr to $2"
echo "Twoj trzeci parametr to $3"
echo "Wszystkie parametry to $@" #zamiast pisać 3 powyższe linijki
echo "Liczba wszystkich parametrow to $#"
echo "Natomiast nazwa skryptu to $0"
Zapisujemy to jako skrypt. Nadajemy odpowiednie uprawnienia. Następnie uruchamiamy zwyczajnie jako ./skrypt, a potem jako ./skrypt 1 2 3 (to poza nazwą skryptu, to są właśnie parametry). Obserwujemy różnicę w działaniu i już wiemy co jest skąd :) Poniższe zadania to rozmaite kombinacje powyższego rozwiązania.
Zadanie 1:
Napisz skrypt wyświetlający : nazwę skryptu oraz pierwszy argument swojego wywołania
#!/bin/bash
echo "$0" #nazwa skryptu oraz powłoka z której korzysta
echo "$1" #pierwszy parametr skryptu
Zadanie 2:
Napisać taki skrypt, którego parametr będzie nazwa pliku, w którym umieszczona zostanie ścieżka
dostępu do shella. Otrzymanemu plikowi należy nadać prawa wykonawcze. UWAGA:W ten sposób utworzony zostanie szablon do tworzenia kolejnych skryptów.
#!/bin/bash
echo "#!/bin/bash" > $1 #ścieżka do shella > nazwa pliku
chmod 777 $1
Zadanie 3:
Napisz skrypt, który zapisze wszystkie swoje parametry wywołania w pliku o nazwie mającej
postać nazwa_skryptu_liczba_parametrów
echo "$@" > "$0_$#" #wszystkie parametry > naz._skr._l_param.
Zadanie 4:
Napisz skrypt przyjmujący cztery parametry. Skrypt powinien utworzyć trzy pliki, których nazwy
podano w pierwszych trzech parametrach o rozszerzeniu podanym w ostatnim parametrze.
#!/bin/bash
touch $1.$4 #nazwa=$1.rozszerzenie=$4
touch $2.$4 #nazwa=$2.rozszerzenie=$4
touch $3.$4 #nazwa=$3.rozszerzenie=$4
Zadanie 5:
Napisz skrypt, który utworzy plik z połączenia dwóch plików o nazwach podanych w argumentach jego wywołania. Wewnątrz nowo utworzonego pliku będzie znajdować się zawartość plików podanych jako argumenty wywołania. Na końcu pliku wynikowego skrypt ma umieścić informację z połączenia jakich plików powstał (tj. Plik powstał z połączenia plików nazwa_plku1 nazwa_pliku2. Nazwa tego pliku powinna mieć postać nazwa_plku1_nazwa_pliku2.
#!/bin/bash
cat $1 $2 > $1_$2
echo "Plik $1_$2 powstal z polaczenia $1 i $2" >> $1_$2
Zadanie 6:
Napisz skrypt, który przyjmuje jeden parametr – liczbę n i wypisuje na ekranie wszystkie litery alfabetu , ich liczbę oraz n-tą literę alfabetu.
#!/bin/bash
#Definicja tablicy
#Definicja tablicy
alfabet=(0 a b c d e f g h i j k l m n o p q r s t u v w x y z)
#n parametr
#n parametr
echo "Znak numer $1 to ${alfabet[$1]}"
#Dodane dzięki czujności michalaV8 ;)
echo "Wszystkie litery alfabetu to ${alfabet[*]}"
#Dodane dzięki czujności michalaV8 ;)
echo "Wszystkie litery alfabetu to ${alfabet[*]}"
Zadanie 7:
Prosty kalkulator. Napisać skrypt, który będzie wywoływany z 2 argumentami liczbowymi. Następnie kolejno będą wykonywane operacje arytmetyczne : +, -, / i *.
#!/bin/bash
echo "Wynik dodawania $1+$2 to: $(($1+$2)) "
echo "Wynik odejmowania $1-$2 to: $(($1-$2)) "
echo "Wynik dzielenia $1/$2 to: $(($1/$2)) "
echo "Wynik mnozenia $1*$2 to : $(($1*$2)) "
Zadanie 8:
Napisać skrypt, który wylicza pole i obwód: kwadratu przy użyciu polecenia let. Jako wynik końcowy powinien pojawić się napis ( gdzie ... - otrzymana wartość):
Pole kwadratu wynosi ...
Obwód kwadratu wynosi ...
#!/bin/bash
let pole=$1*$1
let obwod=$1*4
echo "Pole kwadratu wynosi $pole"
echo "Obwód kwadratu wynosi $obwod"
Zadanie 9:
Napisać taki skrypt, zdefiniowana jest tablica 5-elementowa z następującymi wartościami: 2 4 -3 8 7. Następnie dodać 2 do ostatniego elementu tablicy oraz odjąć 1 od elementu o indeksie trzy. Usunąć element zerowy i dodać nowy jako ostatni element tej tablicy, który jest równy liczbie wszystkich elementów tej tablicy. W wyniku wykonania skryptu ma się pojawić komunikat:
START array=(2 4 -3 8 7)
END array=(4 -3 7 9 4)
#!/bin/bash
x=(2 4 -3 8 7)
echo START array=${x[*]}
x[4]=$[${x[4]}+2]
x[3]=$[${x[3]}-1]
unset x[0]
x[5]=${#x[*]}
echo END array= ${x[*]}
Zadanie 10:
Z linii poleceń sprawdzić z ilu znaków składa się fraza "Podstawy informatyki" oraz pojedyncze
słowo Podstawy. Wynik wyświetlić na ekranie. Użyć polecenia expr.
expr Podstawy+informatyki
Zadanie 11:
Napisz skrypt, który do momentu zakończenia przez użytkownika będzie pobierał 3- cyfrowe ciągi
liczbowe. Następnie wyświetl je oraz ich liczbę.
#Skrypt by Franciszka :D (nie mój ;) )
#!/bin/bash
read -a tablica
echo "Twoj ciag cyfr to ${tablica[*]}"
echo "Ilosc cyfr to ${#tablica[@]}"
echo "Aby zatrzymać Ctrl+C"
./lab_3_zad11
#aby zatrzymać skrypt: ctrl + C
