Uloga Bash skripti

Ekipa;

Ne mogu da povežem pa molim za pomoć ako neko zna.

Koja je uloga bash skripti u Linux distribucijama i generalno ? I da li se bash koristi van distribucija ?
Znam da skriptni jezici upravljaju aplikacijama obično preko API-ja.
Na koji način se to dešava u ovom slučaju tj. u Linux distribucijama ?
Da li su bash skripte integralni dio sistema tj. da li distribucija dolazi sa već gotovim bash programima i gdje su ti fajlovi ?
VIdim da se može preko terminala kretati po sistemu, al to nije programiranje.

Po netu nailazim samo na tutorijale kako naučiti bash, ali gdje i zašto ga primjeniti…Teško.

Eto - ako sam bubno nešto tipa “niđe veze” što kažu sarajlije - preskočite.

Hmmm, osnovna uloga je automatiziranje naredbi/akcija koje kucas u konzoli. Medjutim, bash ima toliko mocnu sintaksu da mozes svasta nesta napraviti - cak i aplikacije sa grafickim interfejsom. http://live.gnome.org/Zenity

Pa, u dosta distroa init skripte (koje pokrecu sistemske servise) su bash skripte najobicnije.

Meni zvuci da bi tebi bio zanimljiv Linux From Scratch :slight_smile:

Kao sto rece Dinko, osnovna uloga je automatizacija vise naredbi/akcija. Uzmi npr. neku obicnu init skriptu, recimo networking.

[code]#!/bin/sh -e

BEGIN INIT INFO

Provides: networking

Required-Start: mountkernfs $local_fs

Required-Stop: $local_fs

Should-Start: ifupdown

Should-Stop: ifupdown

Default-Start: S

Default-Stop: 0 6

Short-Description: Raise network interfaces.

END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

[ -x /sbin/ifup ] || exit 0

. /lib/lsb/init-functions

process_options() {
[ -e /etc/network/options ] || return 0
log_warning_msg “/etc/network/options still exists and it will be IGNORED! Read README.Debian of netbase.”
}

check_network_file_systems() {
[ -e /proc/mounts ] || return 0

if [ -e /etc/iscsi/iscsi.initramfs ]; then
    log_warning_msg "not deconfiguring network interfaces: iSCSI root is mounted."
    exit 0
fi

exec 9<&0 < /proc/mounts
while read DEV MTPT FSTYPE REST; do
    case $DEV in
    /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
        log_warning_msg "not deconfiguring network interfaces: network devices still mounted."
        exit 0
        ;;
    esac
    case $FSTYPE in
    nfs|nfs4|smbfs|ncp|ncpfs|cifs|coda|ocfs2|gfs|pvfs|pvfs2|fuse.httpfs|fuse.curlftpfs)
        log_warning_msg "not deconfiguring network interfaces: network file systems still mounted."
        exit 0
        ;;
    esac
done
exec 0<&9 9<&-

}

check_network_swap() {
[ -e /proc/swaps ] || return 0

exec 9<&0 < /proc/swaps
while read DEV MTPT FSTYPE REST; do
    case $DEV in
    /dev/nbd*|/dev/nd[a-z]*|/dev/etherd/e*)
        log_warning_msg "not deconfiguring network interfaces: network swap still mounted."
        exit 0
        ;;
    esac
done
exec 0<&9 9<&-

}

case “$1” in
start)
process_options

    log_action_begin_msg "Configuring network interfaces"
    if ifup -a; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

stop)
check_network_file_systems
check_network_swap

    log_action_begin_msg "Deconfiguring network interfaces"
    if ifdown -a --exclude=lo; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

force-reload|restart)
process_options

    log_warning_msg "Running $0 $1 is deprecated because it may not enable again some interfaces"
    log_action_begin_msg "Reconfiguring network interfaces"
    ifdown -a --exclude=lo || true
    if ifup -a --exclude=lo; then
        log_action_end_msg $?
    else
        log_action_end_msg $?
    fi
    ;;

*)
echo "Usage: /etc/init.d/networking {start|stop}"
exit 1
;;
esac

exit 0[/code]
Eh sada, da bi omogucio networking na linux masini dovoljno je da ovu skriptu pokrenes sa /etc/init.d/networking start.

U skripti su definisane varijable, funkcije, akcije.

Teoretski, networking mozes pokrenuti i bez ove skripte, ali u tom slucaju moras is shella rucno definisati sve varijable, sve funkcije, akcije… Zamisli koliko bi ti vremena trebalo da to uradis. Plus, jednom kad resetujes racunar, moras sve iz pocetka.

Bash ti omogucava da automatizira ovaj proces.

[quote]Znam da skriptni jezici upravljaju aplikacijama obično preko API-ja.
VIdim da se može preko terminala kretati po sistemu, al to nije programiranje.[/quote]
Ove dvije izjave sam morao izdvojiti. U odnosu na npr. Windows, Unix-like sistemi imaju dvije bitne osobine:

  • sve je fajl - npr. imaš fajl za svaki od uređaja spojenih na sistem, fajl za pristup memoriji i slično;
  • keep it simple stupid (KISS), koja se ovdje posebno očituje u tome što su mnoge high-level funkcionalnosti implementirane preko niza komandno-linijskih programa koji rade sa standarndim ulazom i izlazom.

Drugim riječima, to što je tebi “samo” kretanje po sistemu je sasvim dovoljno jer se tako može uraditi bukvalno sve :slight_smile: Predlažem da jedan period koristiš Linux isključivo preko komandne linije (koristeći neke od jako dobrih tutorijala na tu temu) pa će ti postati jasno da se u bash-u može sve isprogramirati, odnosno sam Linux (Unix) je jedno veliko programsko okruženje a bash je jedan od jezika za rad sa tim okruženjem. Možeš koristiti i Python ili C++ ili Perl ako ti više odgovara kao narječje, suština je da ti programiraš Unix.

Mnogo hvala na odgovorima.

Ovo mi je takođe pomoglo (između ostalog) ;

Similarly, graphical user interfaces for Unix, such as GNOME, KDE, and Xfce can be called visual shells or graphical shells.

A ovo otvara oči

  • sve je fajl - npr. imaš fajl za svaki od uređaja spojenih na sistem, fajl za pristup memoriji i slično;

Tutorijala ima odličnih, već sam krenuo da koristim terminal.

Oh postadoh pripravnik :slight_smile:

kad ti dojadi da neke stvari radiš ručno po nekoliko desetina stotina puta onda ti dođe iz ruku u glavu pa to onda to sve popišeš u fajl, i samo kucaš ./fajl.sh

jer “vrijeme je novac” :wink:

p.s.
http://en.wikipedia.org/wiki/Bash_(Unix_shell)

me don’t like this ==>

$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 May 8 03:46 /bin/sh -> bash*