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