Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Juri1990 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.
-
http://wiki.ubuntu.cz/Bash%20a%20skripty (http://wiki.ubuntu.cz/Bash%20a%20skripty) ;)
-
$@ vsechny parametry, $1 .. $n je prvni az posledni parametr ... $0 by mel bejt samotnej skript
-
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?
-
kazdy to resi jinak .. ja osobne nepouzivam **getopts ale spis **shiftuju .. tohle je ukazka z meho kodu:
## 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
-
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 :-)
-
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
-
sorry, vyzeralo to skoro ak switch
-
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.
-
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.
while [ "$2" = "-.*" ]; do
shift
done
-
tak ty argumenty předáš funkci při volání - třeba všechny
funkce $@
> odshiftovat všechny další přepínače
jakej to má smysl?
-
Vďaka, už to nepotrebujem riešiť, spravil som to cez -d $1 pretože potrebujem jeden prepínač a cesty.
-
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.
cyklus
i=0
pole[$i]="$1"
i=$(($i+1))
koniec cyklu
-
něco o polích v bashi (http://www.linuxjournal.com/content/bash-arrays)