Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Základy bash  (Přečteno 2883 krát)

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Základy bash
« kdy: 06 Října 2011, 12:12:34 »
Zdravím, do školy mám robiť skript a mám dve hlavné otázky, na ktoré som nenašiel zatiaľ odpoveď.
Ako prečítam nejaké veci z toho istého riadku ako spúšťam samotný skript, normálne read? skripi.sh /prva/cesta druha_cesta ...
Ako sa riešia prepínače, rovnako ako to prvé, len overujem znak '-', alebo to má nejaké špecifické riešenie?
Vopred ďakujem za všetkú pomoc.
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

RRRadek Neužil

  • Člen občanského sdružení Ubuntu ČR a placené komunitní podpory
  • Administrátor fóra
  • Závislák
  • ******
  • Příspěvků: 4672
Re:Základy bash
« Odpověď #1 kdy: 06 Října 2011, 13:12:42 »
PS: omluvte moji češtinu není to moje silná stránka, snažím se hlavně vystihnou podstatu problému. ;)

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Základy bash
« Odpověď #2 kdy: 06 Října 2011, 13:53:39 »
$@ vsechny parametry, $1 .. $n je prvni az posledni parametr ... $0 by mel bejt samotnej skript
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Re:Základy bash
« Odpověď #3 kdy: 06 Října 2011, 14:00:45 »
Vďaka obom, už začínam trochu chápať. Tie návody som čítal, ale príklady nie, až teraz  ::)
Len ešte ako sa riešia prepínače, je nejaké zaužívané riešenie?
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Základy bash
« Odpověď #4 kdy: 06 Října 2011, 14:07:53 »
kazdy to resi jinak .. ja osobne nepouzivam **getopts ale spis **shiftuju .. tohle je ukazka z meho kodu:

Kód: [Vybrat]
## some functions
usage() {
    cat << 'EOF'
usage: irssi-for-solaris-sparc.bin [-h] [-b dir] [-t dir] [-x] [-X] [-V file] [-P opts] [-T term] [-U]

-h      : prints out this help message
-b dir  : a directory where will be irssi.sh placed, default is /usr/bin
-t dir  : temporary directory for unpacking files, default is /var/tmp/irssi-installer
-x      : don't delete temporary files
-X      : quit before installing so no changes will be made
-V file : where will be stored a pkgadd/pkgrm log, default is /dev/null
-P opts : additional pkgadd opts, default is "-G", refer to pkgadd(1m) manual
        : you must enclose opts in "doublequotas"
-T term : a $term will be used rather then xterm-color deployed by this installer
-U      : uninstall, if you changed where was a irssi.sh placed, you need to add a "-b dir" option

examples:
        irssi-for-solaris-sparc.bin ## just install everything with default settings
        irssi-for-solaris-sparc.bin -U -b /foo ## uninstall everything including /foo/irssi.sh
        irssi-for-solaris-sparc.bin -t /foo -x -X ## only unpack data archive into /foo and exits
        irssi-for-solaris-sparc.bin -b /bin -t /tmp/foo -x -V /tmp/foo/install.log ## install irssi.sh
               into /bin, use /tmp/foo for temporary data, won't delete them and save a log as /tmp/foo/install.log

background:
        This installer will do generally 3 things:
        - installs additional packages GNUglib, GNUirssi and GNUlibiconv compiled with prefix /opt/gnu
        - places a xterm-color terminal file which doesn't suck (like Sun's xtermc) in /usr/share/lib/terminfo/x
        - creates a /usr/bin/irssi.sh launcher (default path), which you will use for launching irssi

authors:
        xxx@opensuse.org - this installer
        xxx@synack.fi  - packager

EOF
    exit 0;
};

checkfail() {
    echo "$1";
    exit $2;
};

## parsing cli parameters and changing predefined variables
until test -z "$1"; do
    case "$1" in
        -h | --help ) usage;;
        -b ) bin_path="$2"; shift;
                test -w $bin_path || checkfail "$bin_path doesn't exist or you have no +w permissions there" 1;;
        -t ) tmp_path=$2; shift;;
        -x ) tmp_del=no;;
        -X ) pretend=yes;;
        -V ) verbose_logfile="$2"; shift;
                test -f $verbose_logfile && checkfail "$verbose_logfile already exists, choose another one, quitting .." 1;;
        -P ) pkgadd_opts="$2"; shift;;
        -T ) term="$2"; shift;;
        -U ) uninstall=yes;;
        * ) checkfail "bad parameter: \"$1\", try -h for help" 1;;
    esac
    shift;
done

^^ dal jsem tam pro jistotu i obsah funkce checkfail a --help aby se to lepe chapalo ..

ave, ntz
« Poslední změna: 06 Října 2011, 14:36:16 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Re:Základy bash
« Odpověď #5 kdy: 06 Října 2011, 15:45:57 »
Veľká vďaka, v c funguje switch len pre int(char), tak mi to nenapadlo, ale ak tu funguje pre string tak je to paráda :-)
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:Základy bash
« Odpověď #6 kdy: 06 Října 2011, 16:02:40 »
Veľká vďaka, v c funguje switch len pre int(char), tak mi to nenapadlo, ale ak tu funguje pre string tak je to paráda :-)
nechapu o cem mluvis a jak to s tim souvisi .... psal jsem shift a ne switch
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Re:Základy bash
« Odpověď #7 kdy: 06 Října 2011, 16:06:20 »
sorry, vyzeralo to skoro ak switch
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:Základy bash
« Odpověď #8 kdy: 06 Října 2011, 18:31:14 »
Asi tím myslel to, že v C je switch(int), tzn. parametr může být jen integer, ale v bashi v podobném příkazu case je jako parametr word.

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Re:Základy bash
« Odpověď #9 kdy: 24 Října 2011, 14:03:51 »
Pomohli ste mi a mám ešte 2 otázky.
Ak chcem v nejakej funkcii v skripte používať argumenty zadané pri spustený skriptu, ako sa to dá spraviť? Nenapadlo ma iné riešenie ako namiesto funkcie použiť goto.
Ako odshiftovat všetky ďalšie prepínače? Zatiaľ mám toto, ale nefunguje mi to.
Kód: [Vybrat]
while [ "$2" = "-.*" ]; do
 shift
done
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:Základy bash
« Odpověď #10 kdy: 24 Října 2011, 14:41:07 »
tak ty argumenty předáš funkci při volání - třeba všechny
Kód: [Vybrat]
funkce $@
> odshiftovat všechny další přepínače
jakej to má smysl?

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Re:Základy bash
« Odpověď #11 kdy: 25 Října 2011, 08:39:29 »
Vďaka, už to nepotrebujem riešiť, spravil som to cez -d $1 pretože potrebujem jeden prepínač a cesty.
« Poslední změna: 25 Října 2011, 09:36:05 od Juri1990 »
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

Juri1990

  • Aktivní člen
  • *
  • Příspěvků: 102
Re:Základy bash
« Odpověď #12 kdy: 25 Října 2011, 14:03:49 »
Mám ďalšiu otázku, ako normálne zapisovať do pola, existuje niečo také, že sa to vždy zapíše na koniec poľa, bez udania indexu? Momentálne mám toto, ale premenu "i" mi to neberie ako číslo.
Kód: [Vybrat]
cyklus
i=0
pole[$i]="$1"
i=$(($i+1))
koniec cyklu
V linuxe som úplný zelenáč, tak na mňa zľahka jak na debila :D

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:Základy bash
« Odpověď #13 kdy: 25 Října 2011, 14:58:03 »

 

Provoz zaštiťuje spolek OpenAlt.