piątek, 20 marca 2015

watch - pożyteczne linuksowe polecenie

Za pomocą polecenia watch możemy cyklicznie wywoływać inne polecenie (proces) w terminalu. Wynik wywoływanego polecenia wyświetla się standardowo co 2 sekundy bez przewijania ekranu konsoli, dzięki czemu odnosimy wrażenie uruchomionego programu przez cały czas. Czas odświeżania procesu możemy zmieniać za pomocą parametru -n.

Wynik działania komendy watch free:



Parametry programu watch:

-n - zmiana czasu (w sekundach) wywoływania procesu, np.:
      -n 0  - 0.1 sekundy
      -n 1  - 1 sekunda
      -n 3  - 3 sekundy
-d - podświetla zmiany
-t - nie wyświetla nagłówka

Przykłady użycia:

watch -n 0 free - monitoruje wykorzystanie pamięci,

watch sensors - monitorowanie temperatur np. temperatury procesora,

watch "dmesg | tail -20" - monitorowanie stanu urządzeń i innych zdarzeń systemowych, np. gdy coś podłączymy do USB, to zobaczymy informacje o tym urządzeniu.

czwartek, 12 marca 2015

Kurs Bash cz.2

1. Arytmetyka

W bashu mamy następujące operatory arytmetyczne:

+ dodawanie
- odejmowanie
* mnożenie
/ dzielenie
% reszta z dzielenia (modulo)
** potęgowanie

Przykład wykorzystania tych operatorów:

#!/bin/bash

X=9
Y=4

# dodawanie
let Z=X+Y
echo "$X + $Y = $Z"

# odejmowanie
let Z=X-Y
echo "$X - $Y = $Z"

# mnozenie
let Z=X*Y
echo "$X * $Y = $Z"

# dzielenie
let Z=X/Y
echo "$X / $Y = $Z"

# reszta z dzielenia (modulo)
let Z=X%Y
echo "$X modulo $Y = $Z"

# potegowanie
let Z=X**Y
echo "$X^$Y = $Z"


Uruchamiając powyższy skrypt widać, że bash operuje tylko na liczbach całkowitych tzn. 9/4 =2. Resztę z dzielenia otrzymujemy po wykonaniu operacji modulo.

Mamy też operatory arytmetyczne bitowe:

>> przesunięcie bitowe w prawo
<< przesunięcie bitowe w lewo
~ bitowa negacja
& AND bitowe
| OR bitowe
^ XOR bitowe

#!/bin/bash

X=8
Y=1

# przesuniecie bitowe w prawo
let "Z=X>>2"
echo "$Z"

# przesuniecie bitowe w lewo
let "Z=X<<2"
echo "$Z"

# bitowa negacja
let "Z=~X"
echo "$Z"

# AND bitowe
let "Z=X&Y"
echo "$Z"

# OR bitowe
let "Z=X|Y"
echo "$Z"

# XOR bitowe
let "Z=X^Y"
echo "$Z"

W bashu można też przeliczać systemy liczbowe:

#!/bin/bash

declare -i a #deklaracja zmiennej calkowitej

#BIN->DEC
a=2#1001
echo $a

#HEX->DEC
a=16#EF
echo $a

2. Pętle

Pętla for - wykonuje polecenia zawarte wewnątrz pętli, na każdym składniku listy (iteracja).

for zmienna in lista
do
  polecenia
done


Na poniższym przykładzie mamy dwie pętle for. Pierwsza wyświetla elementy listy a druga wszystkie pliki o rozszerzeniu .sh:

#!/bin/bash

for x in apple pear strawberry
do
  echo "This is $x"
done

for plik_sh in *.sh
do
  echo $plik_sh
done

I tu przychodzi następujące pytanie - jak odliczać kolejne wartości liczbowe w pętli for. Jest kilka sposobów. Oto  jeden z nich:

#!/bin/bash

for i in {1..10}
do
  echo $i
done

Pętla while - sprawdza warunek czy jest prawdziwy, jeśli tak to wykonane zostaną polecenia wewnątrz pętli, gdy warunek stanie się fałszywy pętla zostanie zakończona.

while warunek
do
polecenia
done


Przykład:

#!/bin/bash

x=1

while [ $x -le 10 ] #-le mniejsze badz rowne
do
echo $x
x=$[x+1]
done

Pętla until - działa odwrotnie niż while; polecenia w pętli wykonywane są, gdy warunek jest fałszywy - aż stanie się prawdziwy.

until warunek
do
polecenia
done


Przykład:

#!/bin/bash

x=1

until [ $x -ge 10 ] #-le wieksze badz rowne
do
echo $x
x=$[x+1]
done

Koniec części drugiej, cdn.