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