Skrypt katalogi.bash:
rozwiązanie 1
mkdir dokumenty mkdir dokumenty/excel mkdir dokumenty/word mkdir dokumenty/inne mkdir roboczy mkdir roboczy/studenci mkdir roboczy/wykladowcy |
rozwiązanie 2
mkdir -p dokumenty/excel # Przełącznik -p powoduje, że jeśli brakuje # folderu nadrzędnego, to sytem go utworzy mkdir dokumenty/word mkdir dokumenty/inne mkdir -p roboczy/studenci mkdir roboczy/wykladowcy |
Efekt działania: Struktura folderów, która powstanie po wykonaniu skryptu.
Skrypt petla_for_1
#!/bin/bash clear for i in poniedziałek wtorek środa ; do echo $i done
Efekt działania: Skrypt wyświetli w kolejnych liniach nazwy 3 dni tygodnia.
Zmodyfikuj komende echo na następującą: echo -n "$i ". Jaki jest efekt?
Skrypt petla_for_2
#!/bin/bash clear for i in `seq 1 15` ; do echo $i done
Efekt działania: Skrypt wykorzystuje standardową pętlę for, która pobiera kolejne parametry "ze zbioru". Funkcja seq podstawia do petli for kolejne liczby całkowite od 1 do 15. Jest to typowe rozwiązanie dla pętli, którą chcemy wykonać ściśle okresloną ilość razy.
Skrypt petla_for_3
for i in `cat lista.txt` ; do echo $i ; done
Efekt działania: Łatwo domyslić się jak zadziała ten skrypt, jeśli będziemy pamiętać, że dla zbioru parametrów pętli for separatorem jest spacja. W efekcie działania skryptu każdy wyraz pojawi się w nowym wierszu.
Skrypt kasuj_puste_1
Skrypty kasuj_puste mają za zadanie skasować wszystkie pliki puste (o długości 0 bajtów) znajdujące się tylko w bieżącym folderze. Podobne pliki w podfolderach nie powinny być usuniete.
#!/bin/bash # skrypt kasuje wszystkie pliki puste w bieżącym katalogu # zapisujemy liste plików pustych do pliku spis.txt, kasując poprzednią zawartość pliku, # jeśli taki istniał find -maxdepth 1 –size 0 > spis.txt # usuwanie plików pustych for i in `cat spis.txt` ; do rm $i done # usunięcie pliku tymczasowego rm spis.txt
Efekt działania: w bieżącym folderze usunięte zostaną wszystkie pliki puste. W podfolderach takie pliki będą nienaruszone.
Uwaga: dlaczego przy wykonaniu skryptu pojawia się błąd? Pozostawiam to samodzielnemu przeanalizowaniu.
Podpowiedź: co znajduje się w pliku po wykonaniu pierwszej komendy find?
Dlaczego nie użyłem parametru -empty w instrukcji find tylko -size 0?
Skrypt kasuj_puste_2
Zadanie wykonane przez skrypt jest identyczne z poprzednim, lecz jego sposób rozwiązania, zupełnie różny. Oczywiście w dalszym ciągu kluczem rozwiązania jest komenda: find.
Jest to rozwiązanie wg mnie najbardziej czytelne, wykorzystując fakt, że domyślnym separatorem jest spacja, nie musimy nawet uzywać pętli:
rm `find -maxdepth 1 –size 0`
Instrukcja find przygotuje odpowiednią liste plików i przekaże ją do komendy kasującej rm.
Skrypt kasuj_puste_3
find . -maxdepth 1 -size 0 -exec rm {} \;
To rozwiązanie bazuje na mozliwościach wykonania wybranej komendy na znalezionych przez find obiektach. Sekwencja { } przekazuje do komendy rm aktualnie znalezione pliki.
Skrypt kasuj_puste_4
A oto inne rozwiązania tego samego problemu:
find -maxdepth 1 -type f -size 0 -print0 | xargs -0 rm -f
albo:
ls -l | awk ' { if ($5 == 0) print "rm -f "$9 }' | bash
Uwaga: Warto przeanalizować ostatnią komendę. Co się stanie jeśli nie dopiszemy ostatniej sekwencji | bash ?
Skrypt proste_menu
#!/bin/bash # Skrypt tworzacy proste menu clear if [ $# -ne 1 ] then echo "Uzyj polecenia $0 nazwa_pliku" else echo "Wybierz <E>dycja lub <K>asowanie" read key case "$key" in "e"|"E" ) nano $1 ;; "k"|"K" ) `rm $1`;; esac fi
Skrypt nalezy uruchomić z podaniem parametru, który jest nazwą pliku, na którym będziemy wykonywać operacje. W instrukcji case wykorzystałem sekwencję "e"|"E", w której znak | oznacza łącznik lub.
Gdy użytkownik wybierze literę e lub E wskazany w parametrze plik zostanie wyedytowany w edytorze nano, jeśli wybierze k lub K - plik zostanie skasowany.
$# oznacza ilośc parametrów podanych po wywołaniu skryptu.
Skrypt wywolanie_funkcji
Funkcję należy zadeklarować przed jej wywołaniem.
#!/bin/bash function nasza_funkcja { echo -e 'Właśnie użyłeś funkcji o nazwie "nasza_funkcja".\a' } # wywołujemy funkcję: nasza_funkcja
Kilka dodatkowych uwag:
1. Przekierowanie zapisu z consoli do pliku:
ls -lA > listing.txt ls -lA >> listing.txt
Komenda z pierwszej linii spowoduje nadpisanie pliku listing.txt, druga komenda spowoduje dopisanie do pliku nowych informacji, oczywiście w przypadku, gdy on wczesniej już istaniał.
Ciąg dalszy prawdopodobnie nastąpi...