Skocz do zawartości
Zaloguj się, aby obserwować  
tomekaruna

Linux - skrypty powłoki

Polecane posty

Witam, staram się rozwiązać niżej napisane zadania, no ale nie bardzo wiem jak się do tego zabrać. Zadanie 1: Chodzi mi np. o pierwszą linijkę, jak utworzyć skrypt z 2 parametrami ? Mam stworzyć dokument o nazwie: "numerowanie lista.txt num" ? No i myślałem żeby w nim wpisać odpowiednie komendy np. żeby mi numerował pierwszy parametr: "sort $1"  No i co dalej? Jak zrobić resztę? Próbowałem metodą prób i błędów ale nie bardzo wychodzi. Jeżeli ktoś da rady napisać mniej więcej jak to zrobić i wytłumaczyć dlaczego tak a nie inaczej. Będę naprawdę wdzięczny. 

 

1.   Napisz skrypt o nazwienumerowanie, który uruchamiany będziez dwoma parametrami: nazwą pliku tekstowego i dodatkowym rozszerzeniem (np. numerowanie lista.txtnum). Skrypt ten maponumerować wiersze w podanym, jako pierwszyparametr pliku. Wynik działania(tekst z ponumerowanymi wierszami) ma zapisaćw pliku o oryginalnej nazwie, alez dodatkowym rozszerzeniem, które podane było jako drugi parametr(np. lista.txt.num). Na koniec zawartość nowego pliku ma być wyświetlona na ekranie.

 

 

 

2.   Napisz skrypt o nazwiestatystyka, który uruchamiamy będzie zjednym parametrem- nazwą pliku tekstowego (np. statystykalista.txt). Skrypt ten mawyświetlić statystykę, podanegojako parametr pliku. Statystyka ma miećnastępującą postać (wnawiasach klamrowych {...} mają znaleźć się odpowiednie dane):

 

Plik „nazwa pliku” zawiera: Wierszy: {liczba}

 

Słów: {liczba} Znaków: {liczba}

 

ŚrednioznakÉw w słowie: {liczba}

 

 

 

Podpowiedź: Średnią liczbę znaków w słowie możnaobliczyć korzystając z polecenialetpo wcześniejszym przypisaniu odpowiednim zmiennym liczby znaków i słów (np.znaki=‘cat lista.txt | wc -c‘). Zwróć uwagę na tzw. odwrotne cudzysłowy, w których znajduje sięwyrażenie ‘catlista.txt | wc -c‘. Odwrotne cudzysłowy (‘...‘) dostępne są naklawiszu z tyldą. Cudzysłowy te sprawiają,że zmiennej przypisany zostaniewynik wykonanego w nich polecenia(w tym przypadku zmiennejo nazwieznaki przypisana zostanie liczba znaków występujących w pliku lista.txt).

 

 

 

Ponadto, pamiętaj, że polecenie wc zwracając liczbę znaków sumujetakże spacje pomiędzy wyrazami, a to może mieć wpływ na wartość „średniej liczby znaków w słowie”- uwzględnij to w swoichobliczeniach.

 

 

 

1.   W edytorze vi utwórz pliktekstowy lista.txt zawierający listęosób, np.

 

Kowalski Jan Nowak Adam Malec Ewa

 

 

 

2.   Napisz skrypt o nazwiedodaj, którego działanie będzie następujące – skrypt uruchamiany będzie z dwoma parametrami nazwiskiem i imieniem osoby, którą chcemy dodać do listy.Zadaniem skryptu będzie dodanie tej osoby do pliku lista.txt, jego alfabetyczneposortowanie, zapisanie posortowanego pliku, a następnie wyświetlenie aktualnej listy osób i komunikatu Na liście mamy {liczba osób} osób.

 

 

 

3.     Utwórz skrypt o nazwie szukaj.na.serwerze, którego działaniebędzie następujące - skrypt uruchamiany będzie z jednymparametrem, którym jest dowolny ciąg znaków (np.szukaj.na.serwerze justyna). Jego zadaniem jest znalezienie wśród zalogowanych na serwerze użytkowników wszystkich osób, których dane zawierają podany ciąg znaków (bez względu na wielkość liter),a następnie wyświetlenie znalezionych informacji na ekranie, zapisanie ich do pliku znalezieni.txt oraz wyświetleniekomunikatu Znaleziono

 

{liczba osób}osób, których dane zawierają ciągznaków: „{szukany ciąg

 

znaków}”. Podpowiedź: Skorzystaj z poleceniafinger oraz grep (z opcją ignorowaniawielkości wyszukiwanych liter).

 

   

 

 

 

 

Tutaj jest drugi zestaw (ważniejszy jak dla mnie) 

 

1. Zalogować się na swoje konto na serwerze: ie.uek.krakow.pl

2. Utworzyć katalog ~/test

3. Napisać skrypt powłoki o nazwie ~/test/numer , który ponumeruje

wiersze w pliku podanym jako parametr. Zmodyfikowany w ten

sposób plik ma zastąpić oryginalną jego wersję.

4. Dołączyć katalog ~/test do listy katalogów przechowywanej w zmiennej

powłoki PATH

5. Zapisać wartość zwiennej powłoki PATH w pliku ~/test/zmienna_path

6. Zapisać zawartość katalogu ~/test w postaci długiego opisu plików

(ls -l) w pliku ~/test/lista_plików

7. Zapisać wynik działania polecenia history do pliku ~/test/historia

8. Wysłać list na adres **************

 

 

 

 

 

2. mkdir test

 

3. pico numer   (później w tym dokumencie wpisać: sort $1) i znowu nie wiem jak zastąpić oryginalną wersje... Wiem ze komenda która nadpisuje to: ">" lub dopisuje ">>" ale nie bardzo wiem jak je użyć 

 

4. PATH=$PATH:$HOME/test

 

5. pico zmienna_path ( i w nim dopisać: PATH=$PATH:$HOME/test )

 

6. pico lista_plików ( w nim napisać: ls -l test )

 

7. ??? Zapisać historie działan do pliku ale jak?

 

 

 

 

Z góry dziękuje za odpowiedź. 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Witam, staram się rozwiązać niżej napisane zadania, no ale nie bardzo wiem jak się do tego zabrać. Zadanie 1: Chodzi mi np. o pierwszą linijkę, jak utworzyć skrypt z 2 parametrami ? Mam stworzyć dokument o nazwie: "numerowanie lista.txt num" ? No i myślałem żeby w nim wpisać odpowiednie komendy np. żeby mi numerował pierwszy parametr: "sort $1" No i co dalej? Jak zrobić resztę? Próbowałem metodą prób i błędów ale nie bardzo wychodzi. Jeżeli ktoś da rady napisać mniej więcej jak to zrobić i wytłumaczyć dlaczego tak a nie inaczej. Będę naprawdę wdzięczny.

 

A na lekcjach to w okręty grałeś?

Masz nawet z obsługą błędów. :(

#!/bin/bash

if [ $# -ne 2 ]; then
 echo "Masz podać dwa parametry, jełopie"; exit 0;
fi

if [ ! -r $1 ]; then
 echo "Nie mozna odczytać takiego pliku"; exit 0;
fi

nl $1 > $1.$2

 

Tutaj jest drugi zestaw (ważniejszy jak dla mnie)

 

2. mkdir test

 

3. pico numer (później w tym dokumencie wpisać: sort $1) i znowu nie wiem jak zastąpić oryginalną wersje... Wiem ze komenda która nadpisuje to: ">" lub dopisuje ">>" ale nie bardzo wiem jak je użyć

 

 

Jakie sort? Masz przecież ponumerować linie, a nie posortować.

 

nl < $1 > /tmp/numery.tmp ; cat  /tmp/numery.tmp > $1

 

 

4. PATH=$PATH:$HOME/test

 

5. pico zmienna_path ( i w nim dopisać: PATH=$PATH:$HOME/test )

 

Co ty z tym pico?

export PATH=$PATH:~/test

 

6. pico lista_plików ( w nim napisać: ls -l test )

 

 

ls -l > ~/test/lista_plików 

 

 

 

7. ??? Zapisać historie działan do pliku ale jak?

 

history > ~/plikhiostorii

albo

cat .bash_history > ~/plikhiostorii

Z góry dziękuje za odpowiedź.

 

Tak poza tym to wstydziłbyś się pytać o coś takiego mając dostęp do netu, pięć sekund guglania i masz podstawy:

http://www.linux.rk.edu.pl/w/p/standardowe-wejscie-wyjscie/

 

 

Resztę sobie wyguglgasz - tutaj masz wszystko co potrzebujesz.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki wielkie ! Przerobiłem sobie resztę zadanek i jako tako wyszły :) Mam pytanie co do tej linii jeszcze :nl < $1 > /tmp/numery.tmp ; cat /tmp/numery.tmp > $1: Mam rozumieć ją tak że początkowo mi numeruje parametr 1 a następnie nadpisuje go na ? Właśnie o co chodzi z ta linijką "/tmp/numery.tmp" tmp=temporary? oraz później dodajesz to .tmp jeszcze na koniec linijki. Jak byś mógł to wytłumaczyć :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki wielkie ! Przerobiłem sobie resztę zadanek i jako tako wyszły :) Mam pytanie co do tej linii jeszcze :nl < $1 > /tmp/numery.tmp ; cat /tmp/numery.tmp > $1: Mam rozumieć ją tak że początkowo mi numeruje parametr 1 a następnie nadpisuje go na ? Właśnie o co chodzi z ta linijką "/tmp/numery.tmp" tmp=temporary? oraz później dodajesz to .tmp jeszcze na koniec linijki. Jak byś mógł to wytłumaczyć :)

 

To są dwa polecenia, oddzielone średnikami. W skryptach basha oddzielasz polecenia nową linią, albo średnikiem. Inaczej mówiąc wygląda to tak:

 

nl < $1 > /tmp/numery.tmp 
cat  /tmp/numery.tmp > $1

 

Ten /tmp/numery.tmp to plik tymczasowy, bo nie możesz zapisać wyniku do pliku z którego jednocześnie pobierasz dane, gdyż go wyzerujesz. Dlatego najprościej wynik polecenia nl na pliku który jest podany jako parametr $1 zapisać do innego pliku, a w następnym poleceniu zastępujesz jego zawartość tym z pliku tymczasowego. Można oczywiście zapisywać wynik do zmiennej tablicowej i nie korzystać z pliku tymczasowego, ale podejrzewam że mogłeś tego jeszcze nie mieć. ;>

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×