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...