Nekaj nasvetov za delanje shell datotek
Namen tovrstnih datotek je v tem, da s tem zdruzim vec operacij hkrati, ki jih lahko racunalnik avtomatsko
izvaja skupaj z cron tabelami (ob doloceni uri). Nekaj osnovnih navodil.
Še nekaj uporabnih ukazov:
ll ali ls: izpis datotek v direktoriju
ll < a.a se zapisejo podatki, ki se dobijo z ukazom ll v datoteko a.a
ll << a.a se dopisejo podatki, ki se dobijo z ukazom ll v datoteko a.a
cat > b.b omogoca se vpisovanje direktno v datoteko b.b. Vse kar zapisem na ekran se shrani v b.b z ukazom ctrl+d
who|sort sestavljanje ukazov s pomocjo |... who | sort > lista.txt
who | grep mihad Mi izpise le podatke o uporabniku mihad
tail +2 < a.a | head -n3 >hlist
uniq ime_datoteke na ta nacin naredim izpis datoteke na ekran
sort hlist | uniq Kar je v datoteki sortira in izpise na ekran
---------------------------------------------
Če želim selektirati dolečen stolpec v datoteki:
cut -fštevilka stolpca ime_datoteke
Zlepljenje datotek skupaj:
paste datoteka1 datoteka2
Podobno z join
join datoteka1 datoteka2
Prevajanje znakov:
tr "znak1,znak2,znak3,..." "nov_znak1,nov_znak2,...." Selektiranje posameznih vrstic pri določenem pogoju
awk '/pogoj/ {print $st_stolpcev}' ime datoteke
Primer: awk '/good/ { print $1 " " $3 }' inventory
Izkanje vrstic v datoteki z dolčenim zapisom
grep "zapis" ime_datoteke
Primer: grep "too" demofile
Vpogled v datoteko
Z ukazom ex ime_datoteke lahko gledam vrstice v datoteki (1p prva vrstica, 1,5p vrstice med 1 in 5, prikaz vse datoteke 1,$ p))
Primer: ex demofile
1,5 p
Predhodno lahko zapisem se set number (izključim z ukazom set nonumber),
kar pomeni, da se mi bo pri vsaki vrstici izpisala se stevilka vrstice
Brisanje v datoteki
V datoteki nekaj zbrisem tako, da najprej vstopim v datoteko ex ime_datoteke, nato pa z
ukazom st_vrstice,d brisem posamezne ali vec vrstic
Primer ex demofile
:1,5 d (zbriši vrstice od 1 do 5)
Kopiranje v datoteki
V datoteki lahko kopiram vrstice
Primer: 1,4 co $ (kopiraj vrstice od 1 do 4 in jih postavi na zadnjo vrsto,
če napišem številko, to pomeni, da je vrstica vrinjena na to mesto)
Iskanje besed v datoteki
z Ukazom /beseda/ dobis le eno vrstico, z ukazom g/beseda/p (g-kot glabal line)pa dobis vse vrstice,
kjer se nahaja beseda.
Primer: g/linux/ p
Če iščeš točno dolečeno besedo, potem zapišeš \
Menjava besed
Z ukazom st_Vrstice s/orig_beseda/nova/beseda/
Primer: 1,$ s/Linux/Unix/
Primer:g /sister/ s/never/always/ (globalna menjava v vrstici z besedo sister)
Primer: g /Unix/ s/Unix/Linux oziroma krajse g /Unix/s//Linux
Poganjanje datotek ob določeni uri
Cron datoteka ima 5 prostorov za dolocanje dneva, datuma, ure in minute
* * * *
* datoteka oziroma ukaz za izvedbo
- - - -
-
| | |
| |
| | |
| +----- dan v tednu (0 - 6) (nedelja=0)
| | |
+------- mesec (1 - 12)
| | +--------- dan v mesecu
(1 - 31)
| +----------- ura (0 - 23)
+------------- minuta (0 - 59)
|
Primer cron datoteke:
30 4 * * * /home/mihad/programi/vpis_radar1/radar_prepis.sh >/home/mihad/programi/vpis_radar1/napake.log
Datoteka radar_prepis.sh se bo izveddla vsak dan v mesecu ob 4:30, pri tem pa se bodo izpisi programa
zapisovali v datoteko napake.log
POZOR:Datoteko aktiviram z ukazom--> crontab ime_datoteke
kron tabelo pogledam s crontab -l
pozenem s crontab cron_table
brisem s crontab -r
!!!Kako posiljati maile iz linuxa:!!!
Če želim ročno napisati na linux-u, potem zapišem ukaz mutt.
Avtomatsko pošiljanje maila:
mail | mutt -s 'ime subjekta' -a 'ime datoteke,ki jo bom prilepil' e-mail naslov
Primer posiljanja:
mail | mutt -s 'testiranje' -a 'a.a' janez.kranjski@yahoo.com
Tako bo Janez Kranjski dobil elektronsko pošto z naslovom testiranje,
zraven pa bo dobil se prilepljeno datoteko a.a
========================================================================================
Spodaj je predstavljeno nekaj osnovnih ukazov, ki se uporabljajo v shell skriptah:
OPOZORILO Datoteko moras predhodno spremeniti z ukazom chmod +x ime_datoteke
Vaja 1
Opis:S skripto začnem pisati na vrh ekrana in naredim izpis
==================================
clear #zacne izpise na vrhu ekrana
echo "Pozdravljen svet"
==================================
Vaja 2
Opis:Skripta prebere uporabnisko ime in izpise danasnji datum
==================================
#Skripta prebere ime uporabnika in izpise danasnji datum
echo "Pozdravljen $USER"
echo -e "Danes je \c ";date #-e mi omogoča uporabo zankov
echo -e "Logiranih uporabnikov na virgi je trenutno: \c" ; who | wc -l #wc pove število priklopov na virgi
echo "Se koledar za trnutni mesec"
cal
exit
==================================
Vaja 3
Opis:Osnovna uporaba stevil in manipulacija z njimi
==================================
#Kako uporabljam stevila oziroma operacije
a=10
b=12
c=a+b #namenjeno izpisu crk
d=$a+$b #namenjeno izpisu stevilcnega rezultata
echo "Stevila so a=$a,b=$b, $c=$d=`expr $a + $b`"
==================================
Vaja 4
Opis:Uporaba nekaterih ukazov znotraj echo stavka
==================================
#POmen nekaterih ukazov:
#\t =tabulator, \n=nova vrstica, \b=backspace...
echo -e "Spoznavanje nekaterih \t\tukazov\b\n znotraj stavka"
==================================
Vaja 5
Opis:Izpis danasnjega datuma stavka
==================================
#Uporaba datuma
echo "Danasnji datum je `date`".
==================================
Vaja 6
Opis:Branje zapsov na ekran z ukazom read
==================================
#Skripta, ki prebere, kar napises
echo "Kako ti je ime?:"
read fname #prebere spremnljivko
echo "Zdravo $fname!"
==================================
Vaja 7
Opis:Uporaba vecih ukazov
==================================
#Uporaba vecih ukazov na enkrat, tako da jih locim s podpicjem:
date;who;ls > a.a #Izvem, kdo se nahaja na Virgi, hkrati pa imena datotek na direktoriju zapisem v a.a.
==================================
Vaja 8
Opis: Uporaba if stavkov if [...]; then else fi
==================================
#Program, kjer je uporabljen if stavek
echo "Vpisi poljubno stevilo"
read stevka
if [ $stevka -gt 0 ]; then
echo -e "Vpisano stevilo $stevka je pozitivno \n"
else
if [ $stevka -lt 0 ]; then
echo -e "Vpisano stevilo $stevka je negativno \n"
else
echo -e "Vpisano stevilo je 0 \n"
fi
fi
==================================
Vaja 9
Opis: Uporaba sestavljenih if stavkov if [...]; then else fi
==================================
#Program, kjer je uporabljen if stavek
rm fajli.txt
echo "0-nic ne naredim"
echo "1-imena datotek se vpisejo v datoteko: fajli.txt "
echo "Vpisi stevilo"
read stevka
if [ $stevka -eq 1 ]; then
ls >fajli.txt
echo -e "Poglej v datoteko fajli.txt \n"
else
if [ $stevka -eq 0 ]; then
echo -e " Ali ne zelis izvedeti imena datotek na direktoriju?\n"
else
echo -e "Narobe vpisano stevilo \n"
fi
fi
==================================
Vaja 10
Opis: Uporaba for stavkov
==================================
#Enostaven primer uporabe for stavka
#eNOSTAVEN ZAPIS
echo "Prvi nacin for stavka"
for i in 1 2 3 4 5
do
echo "Pozdravljen $i.ič"
done
#Enak zapis z drugacnim pristopom
echo "Drugi nacin for stavka"
for (( i = 1 ; i <=5; i++ ))
do
echo "Pozdravljen $i.ič"
done
==================================
Vaja 11
Opis: Vgnezdeni for stavek
==================================
#Vgnezdeni for stavek zapis matrike
for (( i = 0; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 10; j++ )) ### Inner for loop ###
do
k=`expr 10 \* $i + $j `
echo -n "$k "
done
echo "" #### print the new line ###
done
==================================
Vaja 12
Opis: S for stavkom naredim šahovnico
==================================
#Vgnezdeni for stavek zapis matrike
for (( i = 1; i <= 9; i++ )) ### Outer for loop ###
do
for (( j = 1 ; j <= 9; j++ )) ### Inner for loop ###
do
tot=`expr $i + $j`
tmp=`expr $tot % 2`
if [ $tmp -eq 0 ]; then
echo -e -n "\033[43m "
else
echo -e -n "\033[42m "
fi
done
echo -e -n "\033[40m" #### set back background colour to black
echo "" #### print the new line ###
done
==================================
Vaja 13
Opis: Pogojno izvajanje stavkov
==================================
#Pogojno izvajanje stavkov
ls >a.a && echo "Naredil sem datoteko a.a." || echo "Ni mi uspelo narediti datoteke a.a!!!!"
echo "Kaj naj storim z datoteko a.a(0-briši,1-pusti):"
read stevka
if [ $stevka -eq 0 ]; then
rm a.a && echo "Datoteka je bila uspešno odstranjena" || echo "Datoteka ne obstaja ali ni bila odstranjena"
else
if [ $stevka -eq 1 ]; then
echo -e "Odlocil si se, da bo datoteka ostala na direktoriju \n"
else
echo -e "Ali ne veš, kaj bi storil z datoteko? \n"
fi
fi
==================================
Vaja 14
Opis: Skripta, ki ponuja menijsko izbiro
==================================
#
# Menijsko delovanje skripte
#
while :
do
clear
echo "-------------------------------------"
echo " Kaj zelis "
echo "-------------------------------------"
echo "[1] Danasnji datum in cas"
echo "[2] Prikaz datotek na direktoriju"
echo "[3] Prikazi koledar"
echo "[4] Start editor to write letters"
echo "[5] Izpise prijavljene na Virgo"
echo "[6] Konec"
echo "======================="
echo -n "Izberi eno od stevil [1-6]: "
read yourch
case $yourch in
1) echo "Danasnji datum je `date` , pritisni enter. . ." ; read ;;
2) echo "Na direktoriju so `pwd`" ; ls -l ; echo "Pritisni enter. . ." ; read ;;
3) cal ; echo "Pritisni enter. . ." ; read ;;
4) vi ;;
5) who ; echo "Pritisni enter. . ." ; read ;;
6) exit 0 ;;
*) echo "Opala!!! Izbiras med stevili 1,2,3,4, or 5, kar pa stevilo $yourch ni!!!";
# echo "Pritisni enter !!!. . ." ; read ;;
esac
done
==================================
Vaja 15
Opis: Pogojno izvajanje stavkov
==================================
#Pogojno izvajanje stavkov
ls >a.a && echo "Naredil sem datoteko a.a." || echo "Ni mi uspelo narediti datoteke a.a!!!!"
echo "Kaj naj storim z datoteko a.a(0-briši,1-pusti):"
read stevka
if [ $stevka -eq 0 ]; then
rm a.a && echo "Datoteka je bila uspešno odstranjena" || echo "Datoteka ne obstaja ali ni bila odstranjena"
else
if [ $stevka -eq 1 ]; then
echo -e "Odlocil si se, da bo datoteka ostala na direktoriju \n"
else
echo -e "Ali ne veš, kaj bi storil z datoteko? \n"
fi
fi
==================================