Advertisement
Guest User

Untitled

a guest
Oct 13th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 22.13 KB | None | 0 0
  1. 1. LINUX COMMAND LINE BASH I PRZYJACIELE Oskar Wyciślak (oskar.wycislak@gmail.com)
  2. 2. Agenda
  3. Co to jest powłoka?
  4. Bash
  5. Interaktywna praca
  6. Metody wprowadzania (emacs, vi)
  7. Pliki i katalogi
  8. Historia i jej przeszukiwanie
  9. Pliki konfiguracyjne
  10. .bashrc
  11. .bash_profile
  12. Zmienne
  13. Specjalne zmienne
  14. Strumienie i potoki
  15. Przydatne komendy
  16. Wczytywanie danych
  17. Co to jest skrypt?
  18. Pierwszy skrypt 2 oskar.wycislak@gmail.com
  19. 3. Agenda dzień 2
  20. Dopełnianie
  21. Arytmetyka
  22. Instrukcje warunkowe
  23. Logika
  24. Pliki (czy istnieje np.)
  25. If / case
  26. test
  27. Pętle
  28. for
  29. while
  30. until
  31. Funkcje
  32. Praca w tle
  33. Pułapki i sygnały
  34. Tablice 3 oskar.wycislak@gmail.com
  35. 4. Czym jest powłoka?
  36. Program uruchamiający inne programy
  37. Interfejs między użytkownikiem a systemem (jądrem).
  38. Typy powłok
  39. Tekstowe
  40. Bash, linia poleceń windows
  41. Graficzne
  42. Windows explorer, fluxbox, xfce, kde, gnome 4 oskar.wycislak@gmail.com
  43. 5. Bash <xxx> Pomorze ktos? <Unf> Niestety, mazowsze. <kubaaa> co robisz ? <kambys> nic <kambys> w pracy jestem 5 oskar.wycislak@gmail.com
  44. 6. Bash – Bourne again shell Brian Fox Stworzył bash’a jak miał 30 lat. To znaczy, że mamy jeszcze czas! Jedna z najpopularniejszych powłok systemów Unixowych. Standard w większośći dystrybucji Linux’a oraz w OS X. 6 oskar.wycislak@gmail.com
  45. 7. Praca interaktywna - emacs
  46. bash/set –o emacs – standardowo
  47. C(ctrl)-a – początek linii
  48. C-e – koniec linii
  49. C-f –znak do przodu
  50. C-b –znak do tyłu
  51. A(alt)-f – słowo do przodu
  52. Słowo – litery i cyfry, znak specjalny przerywa słowo
  53. A-b – słowo do tyłu
  54. C-l – czyści ekran (clear)
  55. C-k – kasuje wszystkie znaki za kursorem oraz znak pod kursorem
  56. C-u – kasuje wszystkie znaki przed kursorem
  57. C-w – kasuje jedno słowo przed kursorem
  58. A-d – kasuje jedno słowo za kursorem
  59. C-x C-u – cofnij
  60. C-x C-e – otwiera edytor do edycji komend
  61. A-# – komentuje linię i rozpoczyna nową 7 oskar.wycislak@gmail.com
  62. 8. Praca interaktywna – vi
  63. bash/set –o vi (tryb wprowadzania – input mode)
  64. esc – tryb poleceń
  65. i – wstaw znak przed kursorem
  66. a – wstaw znak za kursorem
  67. x – skasuj znak pod kursorem
  68. h, l – lewo prawo, jeden znak
  69. w, b – początek poprzedniego, kolejnego słowa
  70. 0, ^, $ - bezwzględny początek, pierwszy niebiały znak, koniec linii
  71. % - pasujący nawias
  72. D – kasuje wszystkie znaki za kursorem oraz znak pod kursorem
  73. C-u – kasuje wszystkie znaki przed kursorem
  74. u – cofnij
  75. U – cofnij wszystkie
  76. A(alt)-# - komentuje linię i rozpoczyna nową Można też # w trybie poleceń 8 oskar.wycislak@gmail.com
  77. 9. Pliki i katalogi
  78. ls – wyświetla listę plików oraz katalogów
  79. -l – wyświetla informacje w postaci listy
  80. -a – pokazuje również ukryte pliki i katalogi
  81. pwd – pokazuje w jakim znajdujemy się aktualnie katalogu
  82. cd – zmienia aktualny katalog na inny
  83. chmod – zmienia uprawnienia
  84. chown – zmienia właściciela
  85. mkdir – tworzy katalog
  86. -p – tworzy od razu całą ścieżkę
  87. cp – kopiuje plik lub katalog
  88. mv – przenosi plik lub katalog
  89. rm – usuwa plik lub katalog 9 oskar.wycislak@gmail.com
  90. 10. Drzewo katalogów 10 oskar.wycislak@gmail.com
  91. 11. Historia
  92. history
  93. ~/.bash_history
  94. shopt -s histverify
  95. Zmienne środowiskowe
  96. HISTFILE, HISTLIFE, HISTSIZE
  97. HISTCONTROL
  98. ignorespace:ignoredups
  99. !, !!, !n, !-2
  100. !!:gs/foo/bar/ - substytucje jak w sedzie
  101. sudo !!
  102. cd - to też historia ;-) 11 oskar.wycislak@gmail.com
  103. 12. Wyszukiwanie w historii CTRL+ 12 oskar.wycislak@gmail.com
  104. 13. Pliki konfiguracyjne
  105. .bashrc Wykonuje się z każdym odpaleniem powłoki zmienne, funkcje, etc
  106. /etc/bashrc
  107. ~/.bashrc
  108. .bash_profile Wykonuje się za każdym interaktywnym logowaniem uptime, motd, etc
  109. /etc/profile
  110. ~/.bash_profile
  111. Często załącza .bashrc http://tldp.org/LDP/abs/html/sample-bashrc.html 13 oskar.wycislak@gmail.com
  112. 14. Zmienne
  113. Czym jest zmienna?
  114. Deklaracja zmiennych w Bash’u
  115. bash$ zmienna=“wartość”;
  116. bash$ unset zmienna;
  117. export – zmienne lokalne oraz globalne
  118. env i set
  119. Wynik komendy w zmiennej
  120. Średni sposób – bash$ zmienna=`ls`; - ``
  121. Dobry sposób – bash$ zmienna=$(ls); - $() 14 oskar.wycislak@gmail.com
  122. 15. Zmienne specjalne
  123. $1, $2, $3 … $(10), $(11), … - parametry
  124. $# - liczba przekazanych parametrów
  125. $@ - tablica ze wszystkimi parametrami
  126. Bardzo ważne – używając zmiennej $@ koniecznie brać ją w cudzysłów ( “$@). W przeciwnym wypadku przy iteracji np. w pętli mogą wystąpić problemy z przekazanymi parametrami.
  127. $* - wszystkie parametry jako string
  128. $0 – nazwa skryptu
  129. $$ - PID procesu
  130. $? – kod wyjścia ostatniej komendy
  131. $! – PID ostatniego procesu odpalonego w tle 15 oskar.wycislak@gmail.com
  132. 16. Zmienne systemowe
  133. $HOME – katalog domowy
  134. $HOSTNAME – nazwa hosta
  135. $IFS – osobny slajd
  136. $OLDPWD (cd -) – poprzedni katalog
  137. $PATH – ścieżka wyszukiwania
  138. $PPID – PID procesu matki
  139. $PS1 – osobny slajd
  140. $PWD – aktualny katalog
  141. $RANDOM – losowa liczba całkowita http://tldp.org/LDP/abs/html/internalvariables.html 16 oskar.wycislak@gmail.com
  142. 17. IFS – wewnętrzny separator pól IFS jest używany przez Bash do rozpoznawania słów (lub linii). Standardowo jest to znak biały, spacja, tabulator oraz znak nowej linii. mbp:~ canto$ IFS=“:" && for i in $(echo ”a:b:c:d"); do echo $i; done a b c d mbp:~ canto$ IFS=$’n’ && for i in $(cat); do echo $i; done a b c d aD b c d 17 oskar.wycislak@gmail.com
  143. 18. IFS cd.
  144. Dlaczego $’n’ a nie po prostu “n”?
  145. $’n’ – jeden bajt mbp:~ canto$ echo -n $'n' | hexdump 0000000 0a 0000001
  146. “n” – dwa bajty mbp:~ canto$ echo -n "n" | hexdump 0000000 5c 6e 0000002 18 oskar.wycislak@gmail.com
  147. 19. PS1 19 oskar.wycislak@gmail.com
  148. 20. Strumienie
  149. Strumienie
  150. stdin – standardowe wejście, fd 0
  151. stdout – standardowe wyjście, fd 1
  152. stderr – strumień błędów, fd 2
  153. Przekierowanie strumienia
  154. Wejścia <
  155. Wyjścia >
  156. Wyjścia do fd >&n 20 oskar.wycislak@gmail.com
  157. 21. Potoki
  158. Potok, pipe, |
  159. Mechanizm komunikacji między procesami
  160. Najczęściej łączy stdout pierwszego procesu z stdin drugiego cat plik | sed coś | grep coś | sort 21 oskar.wycislak@gmail.com
  161. 22. Przydatne komendy i przełączniki
  162. man
  163. echo
  164. touch
  165. cat
  166. grep
  167. seq
  168. cut
  169. sort
  170. uniq
  171. paste
  172. less
  173. more Find head Tail tee Awk sed tr ps which wc wget/curl md5sum/digest 22 oskar.wycislak@gmail.com
  174. 23. man, info, whatis/apropos
  175. man man
  176. -s - Sekcje
  177. 1 komendy
  178. 2 wywołania systemowe (syscall)
  179. 3 funkcje bibliotek
  180. 4 pliki specjalne
  181. 5 format plików
  182. 6 gry i wygaszacze ekranu
  183. 7 różne
  184. 8 komendy i demony administracyjne
  185. 9 wewnętrzne funkcje jądra
  186. /usr/share/man, /usr/share/man/whatis
  187. /usr/share/info 23 oskar.wycislak@gmail.com
  188. 24. echo, touch, cat
  189. echo – wyświetla dany tekst
  190. -n
  191. -e
  192. Echo… echo… Wbudowane oraz /bin/echo
  193. touch – uaktualnia ostatni czas dostępu oraz modyfikacji
  194. Zwykle używany do tworzenia nowego pustego pliku
  195. cat – łączy oraz wyświetla pliki
  196. -v – wyświetla także znaki kontrolne
  197. tac – odwrotność cat 24 oskar.wycislak@gmail.com
  198. 25. grep
  199. grep – Jedno z najczęściej używanych narzędzi, wyświetla linie pasujące do wzorca
  200. -R – wyszukiwanie rekursywne
  201. -A – pokaż n lini za znalezionym wzorcem
  202. -B - pokaż n lini przed znalezionym wzorcem
  203. -C - pokaż n lini za i przed znalezionym wzorcem
  204. -c – pokaż ilość znalezionych lini
  205. -i – ignoruje wielkość liter
  206. -v – pokaż linie niepasujące do wzorca
  207. -q – tryb cichy, nie wyświetla nic. Wychodzi z kodem błędu 0 jeśli wzorzec pasował lub 1 jeśli nie znaleziono pasujących linii bash$ netstat -an | grep -i listen bash$ grep –v –e ^# -e ^$ /etc/apache2/httpd.conf 25 oskar.wycislak@gmail.com
  208. 26. seq, cut
  209. seq – tworzy sekwencję liczb
  210. -s – string pomiędzy liczbami, standardowo jest to nowa linia bash$ for i in $(seq 1 255); do ping -c 1 192.168.1.$i & done
  211. cut – wycina zdefiniowane fragmenty pliku
  212. -d – znak rodzielający
  213. -f – pola, które zostaną wyświetlone
  214. n, n,m, n-m bash$ cut -d : -f 1,5 /etc/passwd bash$ for i in $(seq 1 255); do ping -c 1 192.168.1.$i | grep “bytes from” | cut -d " " -f4 | cut -d : -f1 & done 26 oskar.wycislak@gmail.com
  215. 27. sort
  216. sort – sortuje plik tekstowy
  217. -n - sortowanie numeryczne
  218. -r - odwraca wynik sortowania
  219. -f - ignoruje wielkość liter
  220. -T - katalog na plik tymczasowy, bardzo przydatne przy sortowaniu plików większych niż ilość pamięci RAM
  221. -u - nie wyświetla duplikatów
  222. -k - ustaw klucz sortowania na pozycji n
  223. -t - separator pól, często używane razem z –k bash$ sort –u –n –t. –k1,1 –k2,2 –k3,3 –k4,4 ip 27 oskar.wycislak@gmail.com
  224. 28. uniq
  225. uniq – filtruje unikalne linie w pliku. Plik musi być posortowany
  226. -u – pokaż tylko unikalne linie
  227. -d – pokaż tylko zduplikowane linie
  228. -c – pokaż ilość wystąpień każdej linii
  229. -i – ignoruj wielkość liter bash$ sort –n –t. –k1,1 –k2,2 –k3,3 –k4,4 ip | uniq -c 28 oskar.wycislak@gmail.com
  230. 29. paste, less, more
  231. paste – wyświetla linie plików obok siebie
  232. less – pozwala przeglądać zawartość pliku
  233. -f, działa jak tail –f, podąża za zmianami w pliku
  234. more – uboga wersja less’a 29 oskar.wycislak@gmail.com
  235. 30. find
  236. find – wyszukuje pliki lub foldery
  237. -type – typ
  238. b - urządzenie blokowe
  239. c – urządzenie “wskazujące”
  240. d – katalog
  241. f – plik
  242. l – link symboliczny
  243. p – kolejka fifo
  244. s – gniazdo (socket)
  245. -name – nazwa
  246. -iname – nazwa bez rozróżniania wielkości liter
  247. --maxdepth – “głębokość” wyszukiwania
  248. -mtime, -atime, -ctime – czas od ostatniego zmodyfikowania, dostępu, stworzenia pliku
  249. -exec – uruchomienie komendy, {} przekazuje ścieżkę
  250. -ls – wykonuje ls na każdym znalezionym pliku/katalogu
  251. -size – określa wyszukiwaną wielkość pliku
  252. Logika - -and, -not, -or bash$ find /var/log -type f -mtime +30d -ls bash$ find /var/log -type f -mtime +30d -exec ls -la {} ; bash$ find / -type f ( -perm 4000 -or -perm 2000 ) -ls 30 oskar.wycislak@gmail.com
  253. 31. head, tail, tee
  254. head – wyświetla n pierwszych linii pliku
  255. tail – wyświetla n ostatnich linii pliku
  256. -f – tail będzie czekał aż na końcu pliku pojawią się nowe dane I je wyświetli
  257. -F – lepsza wersja –f, nie wszędzie dostępna
  258. tee – przyrządza herbatę kopiuje stdin do stdout oraz do pliku. Bardzo przydatne przy logowaniu bash$ netstat -an| tee /tmp/tee.out 31 oskar.wycislak@gmail.com
  259. 32. awk
  260. AWK – interpretowany język programowania bash$ cat /etc/passwd | awk –F ‘:’ ‘{print $1 “ “ $5}’ bash$ awk 'length > 64’ /etc/passwd bash$ awk NF plik bash$ awk 'FS=":" { if ($3 == 0) {print $0} }' /etc/passwd 32 oskar.wycislak@gmail.com
  261. 33. sed
  262. sed – edytor strumieniowy, używany do edycji tekstu bash$ sed s/jedno/drugie/ plik bash$ sed s/jedno/drugie_zawsze/g plik bash$ sed s/jedno/drugie/g plik1 > plik2 bash$ sed –i s/jedno/drugie/g plik1 bash$ sed ‘/^$/d’ plik bash$ sed ‘5d’ ~/.ssh/known_hosts 33 oskar.wycislak@gmail.com
  263. 34. tr
  264. tr – zamienia znak w strumieniu
  265. -d – usuwa znak
  266. [:class:] – zestaw znaków
  267. alnum – znaki alfanumeryczne
  268. alpha – znaki alfabetu
  269. blank – białe znaki
  270. cntrl – znaki kontrolne
  271. digit – cyfry
  272. lower – małe litery
  273. upper – wielkie litery bash$ tr ‘[:lower:]’ ‘[:upper:]’ bash$ tr ‘n’ ‘ ‘ 34 oskar.wycislak@gmail.com
  274. 35. ps
  275. ps – wyświetla status procesów
  276. -a – pokaż procesy innych użytkowników
  277. -x – pokaż procesy bez terminali
  278. -u – pokaż formacje o procesach
  279. -o – opcje
  280. user, pid, ppid, pgid, sess, jobc, state, tt, time, comm 35 oskar.wycislak@gmail.com
  281. 36. Wczytywanie danych
  282. read – wczytuje stdin do zmiennej/zmiennych while IFS=: read name passwd uid gid fullname ignore do echo "$name $fullname" done < /etc/passwd 36 oskar.wycislak@gmail.com
  283. 37. Czym jest skrypt?
  284. Listą komend dla interpretera
  285. Narzędziem pracy administratora 37 oskar.wycislak@gmail.com
  286. 38. Po co nam skrypty?
  287. Automatyzować powtarzalne zadania
  288. Udostępniać funkcjonalność dla innych użytkowników systemu
  289. Upraszczać skomplikowane zadania
  290. Planować pracę 38 oskar.wycislak@gmail.com
  291. 39. Pierwszy skrypt #!/bin/bash #mój pierwszy super skrypt! - komentarz echo “Witaj świecie”; 39 oskar.wycislak@gmail.com
  292. 40. Prosty skrypt wykonujący kopie zapasowe #!/bin/bash #To jest pierwsza bardzo prosta wersja skryptu do kopii zapasowych. #W kolejnej części będziemy ten skrypt ulepszać i dodawać nowe funkcjonalności echo "Kopiuje pliki starsze niz 30 dni z /var/log do /var/backup"; mkdir -p /var/backup; find /var/log/ -type f -mtime +30 | xargs tar -zcvf /var/backup/bak-$(date "+%d%m%y").tar.gz find /var/log/ -type f -mtime +30 –exec rm -f {} ; echo "Koniec." 40 oskar.wycislak@gmail.com
  293. 41. Dopełnianie i rozwijanie
  294. TAB
  295. Komend
  296. Nazw plików
  297. Nazw zmiennych
  298. Nawiasy klamrowe [canto@localhost ~]$ echo {a..z} 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 [canto@localhost ~]$ echo /var/tmp/{oskar,zdzisiek,marta.*} /var/tmp/oskar /var/tmp/zdzisiek /var/tmp/marta.* 41 oskar.wycislak@gmail.com
  299. 42. Zamiany zmiennych (-.-)
  300. ${foo:-bar}
  301. Jeśli foo puste lub nie istnieje wyświetl bar, w przeciwnym wypadku wyświetl foo – zamiana
  302. ${foo:=bar}
  303. Tak jak powyżej z tą różnicą, iż zamiast zamiany następuje przypisanie (permamentne)
  304. ${foo:?bar}
  305. Jeśli foo jest puste lub nie istnieje zwróć błąd (stderr) i bar, w przeciwnym wypadku zwróć foo
  306. ${foo:+bar}
  307. Jeśli foo jest puste lub nie istnieje nie rób nic. Jeśli istnieje lub niepuste zamień na bar (zamiana)
  308. ${#foo}
  309. Zwraca długość foo lub ilość elementów jeśli foo jest tablicą
  310. ${foo:ofset:długość}
  311. Wyświetl długość znaków foo zaczynając od ofset 42 oskar.wycislak@gmail.com
  312. 43. Ciekawsze zamiany zmiennych (-.-)
  313. ${foo#bar}
  314. Jeśli bar (regex) pasuje do początku foo wtedy zwróć foo pozbawiony tekstu do pierwszego dopasowania
  315. ${foo##bar}
  316. To samo co powyżej jednak zwraca foo pozbawione tekstu aż do ostatniego dopasowania [canto@localhost ~]$ export foo=/var/tmp/jacek.txt.bak.old [canto@localhost ~]$ echo ${foo#*.} txt.bak.old [canto@localhost ~]$ echo ${foo##*.} old
  317. ${foo%bar}
  318. Podobnie jak w przypadku „#” lecz zwraca foo pozbawione tekstu do pierwszego dopasowania od końca foo
  319. ${foo%%bar}
  320. Jak wyżej lecz po ostatnim dopasowaniu od końca foo [canto@localhost ~]$ echo ${foo%.*} /var/tmp/jacek.txt.bak [canto@localhost ~]$ echo ${foo%%.*} /var/tmp/jacek 43 oskar.wycislak@gmail.com
  321. 44.
  322. ${foo/wzorzec/bar}
  323. Zamień (jeden) wzorzec w foo na bar
  324. Jeśli wzorzec zaczyna się od
  325. / - zamień wszystkie wystąpienia
  326. # - dopasuj od początku foo
  327. % - dopasuj od końca foo [canto@localhost ~]$ echo $foo 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 [canto@localhost ~]$ echo ${foo//n/Z} a b c d e f g h i j k l m Z o p q r s t u v w x y z+Z [canto@localhost ~]$ echo ${foo/n/Z} a b c d e f g h i j k l m Z o p q r s t u v w x y z+n 44 oskar.wycislak@gmail.com
  328. 45. Arytmetyka
  329. $((2+2*2))
  330. ++foo, --foo, foo++, foo--
  331. &&, ||
  332. Operacje logiczne (I i LUB)
  333. &, |, ^
  334. Operacje bitowe (I, LUB, XOR)
  335. <=, >=, <, >, ==, != 45 oskar.wycislak@gmail.com
  336. 46. Instrukcje warunkowe if warunek then pracuj fi 46 oskar.wycislak@gmail.com
  337. 47. if warunek then pracuj else obijaj się fi 47 oskar.wycislak@gmail.com
  338. 48. [canto@localhost ~]$ if [ -f /var/log/messages1 ] > then > echo "Plik istnieje"; > else > echo "Plik NIE istnieje"; > fi Plik NIE istnieje 48 oskar.wycislak@gmail.com
  339. 49. [ vs [[
  340. [[, lepsze, nowsze, ciekawsze, więcej funkcji
  341. Dostępne tylko w bashu
  342. &&, ||, =~
  343. [, dobre, przenośne 49 oskar.wycislak@gmail.com
  344. 50. test
  345. !, negacja wyrażenia
  346. WYRAŻENIE -a WYRAŻENIE, „AND”, „i” oba wyrażenia są prawdziwe
  347. WYRAŻENIE -o WYRAŻENIE, „OR”, „lub” jedno z wyrażeń jest prawdziwe Powyższe są niezalecane, nie powinno się ich używać a zamiast nich używać [[.
  348. -b, plik istnieje i jest urządzeniem blokowym
  349. -c, plik istnieje i jest urządzeniem znakowym
  350. -d, plik istnieje i jest katalogiem (w linuxie wszystko jest plikiem ;-)
  351. -e, plik istnieje
  352. -f, plik istnieje i jest „normalnym” plikiem
  353. -h, plik istnieje i jest linkiem symbolicznym
  354. -k, plik istnieje i ma ustawiony sticky bit
  355. -r, plik istnieje i mamy prawa do jego odczytu
  356. -s, plik istnieje i ma wielkość większą niż 0
  357. -w, plik istnieje i mamy prawo do zapisu w nim
  358. -x, plik istnieje i mamy prawo do wykonania
  359. TEXT == TEXT, prawda jeśli teksty są takie same
  360. TEXT != TEXT, prawda jeśli teksty są różne
  361. -eq, -ne, -ge, -gt, -le, -lt, porównywanie liczb, prawda jeśli, równe, różne, większe równe, większe, mniejsze równe, mniejsze 50 oskar.wycislak@gmail.com
  362. 51. case case "$1" in start) # $1 == „start” start ;; stop) # $1 == „stop” stop ;; status) # $1 == „status” status ;; *) # $1 =~ „*”, czyli reszta echo $"Usage: $0 {start|stop|restart}" exit 1 esac 51 oskar.wycislak@gmail.com
  363. 52. Przykład #!/bin/bash if [ -w "$1" ] then echo "Plik istnieje i mozemy do niego pisac"; wielkosc=$(du $1 | awk '{print $1}'); echo "Jego wielkosc to $wielkosc bajt/y/ow"; elif [ -f "$1" ] then echo "Plik istnieje ale nie mozemy do niego pisac"; else echo "Plik nie istnieje - $1"; fi 52 oskar.wycislak@gmail.com
  364. 53. Przykład nr 2 #!/bin/bash if [ $1 == "costam" ] then echo "OK" else echo "NOK" fi 53 oskar.wycislak@gmail.com
  365. 54. Przykład nr 2 lepiej #!/bin/bash if [ x$1 == "xcostam" ] then echo "OK" else echo "NOK" fi 54 oskar.wycislak@gmail.com
  366. 55. Przykład nr 3 #!/bin/bash if [ x$1 == "x" ] then echo "Uzycie $0 nazwa_uzytkownika"; exit 1 fi grep -q $1 /etc/passwd if [ $? -eq 0 ] then echo "Uzytkownik $1 istnieje"; else echo "Uzytkownik $1 nie istnieje"; fi 55 oskar.wycislak@gmail.com
  367. 56. backup.sh #!/bin/bash co=${1:-"/var/log"}; gdzie=${2:-"/var/backup"}; if [ ! -d $co ] then echo "Katalog $co nie istnieje"; exit 1 fi echo "Kopiuje pliki starsze niz 30 dni z $co do $gdzie"; mkdir -p $gdzie; find $co -type f -mtime +30 | xargs tar -zcvf $gdzie/bak-$(date "+%d%m%y").tar.gz find $co -type f -mtime +30 .exec rm -f {} ; echo "Koniec." 56 oskar.wycislak@gmail.com
  368. 57. Pętle
  369. for
  370. while
  371. until 57 oskar.wycislak@gmail.com
  372. 58. for for ZMIENNA in LISTA do PRACA; done 58 oskar.wycislak@gmail.com
  373. 59. for [canto@localhost ~]$ for i in a b c d; do echo $i; done a b c d 59 oskar.wycislak@gmail.com
  374. 60. for, ciekawszy przykład [canto@localhost ~]$ for i in *; do echo $i; done backup.sh d.sh f.sh hardcopy.2 nltk_data space.sh s.sh veelobot 60 oskar.wycislak@gmail.com
  375. 61. for, jeszcze ciekawszy przykład for i in $(netstat -an | grep ^tcp | grep -v LISTEN | awk '{print $5}' | awk -F ":" '{print $1}'); do whois $i; done 61 oskar.wycislak@gmail.com
  376. 62. for [canto@localhost ~]$ for host in $(cat plik_z_hostami); do ping -c1 $host; done [canto@localhost ~]$ for host in $(cat plik_z_hostami); do scp /var/log/{messages,authlog,syslog, costam_jeszcze} –i ~/.ssh/mój_tajny_klucz ja@$host:/backup/logs/; done 62 oskar.wycislak@gmail.com
  377. 63. while
  378. while WARUNEK_JEST_PRAWDZIWY do coś coś coś done
  379. W praktyce najczęściej używane do pętli nieskończonych while true do ping -c1 host.domain; sleep 10; done 63 oskar.wycislak@gmail.com
  380. 64. until
  381. until WARUNEK_BĘDZIE_PRAWDZIWY do coś coś coś; done
  382. until działa podobnie jak while z tą różnicą, że zawartość wykonuję się dopóki warunek nie będzie prawdziwy włącznie num=1; until [ $num -eq 3 ] do ((num++)); echo $num; done 2 3 64 oskar.wycislak@gmail.com
  383. 65. break i continue
  384. break przerywa pętlę
  385. continue przechodzi do kolejnej iteracji
  386. Działa dla pętli for, while, until i select 65 oskar.wycislak@gmail.com
  387. 66. Funkcje
  388. Funkcja, zbiór komend
  389. function NAZWA { CIAŁO_FUNKCJI; } NAZWA() { CIAŁO_FUNKCJI; }
  390. Parametry, działają tak samo jak w skrypcie, tj $1..$n 66 oskar.wycislak@gmail.com
  391. 67. Praca w tle
  392. jobs, wyświetla liczbę zadań
  393. bg, wznawia zadanie w tle
  394. fg, wznawia zadanie
  395. kill, wysyła sygnał
  396. &, praca w tle
  397. Ctrl+z, przerwij 67 oskar.wycislak@gmail.com
  398. 68. Pułapki i sygnały
  399. Sygnał, co to jest sygnał
  400. Lista sygnałów w linuxie
  401. 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
  402. 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
  403. 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
  404. 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
  405. 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
  406. 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
  407. 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
  408. 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
  409. 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
  410. 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
  411. 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX- 7
  412. 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX- 2
  413. 63) SIGRTMAX-1 64) SIGRTMAX 68 oskar.wycislak@gmail.com
  414. 69. trap oskar.wycislak@gmail.com 69
  415. trap, przechwytuje sygnały
  416. 70. backup.sh oskar.wycislak@gmail.com 70 #!/bin/bash #Prosty skrypt do backupow # # version 0.1 - 06.5.2013 - Oskar Wycislak #funkcja szukajaca i pakujaca pakuj() { if [ ! -d $1 ] then echo "Katalog $1 nie istnieje"; exit 1 fi echo "Kopiuje pliki starsze niz 30 dni z $1 do $2"; mkdir -p $2; find $1 -type f -mtime +30 2>/dev/null | xargs tar -zcvf $2/bak-$(date "+%d%m%y")- $RANDOM.tar.gz; }
  417. 71. backup.sh oskar.wycislak@gmail.com 71 #kasowanie plikow kasuj() { find $1 -type f -mtime +30 -exec rm -f {} ; 2>/dev/null } co=${1:-"/var/log"}; gdzie=${2:-"/var/backup"};
  418. 72. backup.sh oskar.wycislak@gmail.com 72 #ignoruj sygnal INT (ctrl+c) trap "" SIGINT; #dla kazdego katalogu podanego jako 1 parametr for katalog in $co do #wykonaj funkcje pakujaca pakuj $katalog $gdzie; done echo "Koniec."
  419. 73. Tablice
  420. tablica=(raz dwa trzy)
  421. echo ${tablica[1]}
  422. unset ${tablica[1]} [canto@localhost ~]$ for i in ${tablica[@]}; do echo $i; done raz dwa trzy 73 oskar.wycislak@gmail.com
  423. 74. Dodatki
  424. alias ls='echo "Segmentation Fault”’ mbp:~ canto$ ls –la Segmentation Fault -la
  425. alias ls='echo "Segmentation Fault"; echo > /dev/null’ mbp:~ canto$ ls –la Segmentation Fault 74 oskar.wycislak@gmail.com
  426. 75. oskar.wycislak@gmail.com 75 :(){ :|:& };:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement