Vím, že skripty shellu pouze spouštějí příkazy, jako by byly spouštěny v příkazovém řádku. Chtěl bych mít možnost spouštět skripty shellu, jako by to byly funkce... To znamená, že do skriptu převezmete vstupní hodnotu nebo řetězec. Jak k tomu přistoupím?
Přijatá odpověď:
Příkaz shell a všechny argumenty tohoto příkazu se zobrazí jako číslované proměnné shellu:$0
má hodnotu řetězce samotného příkazu, něco jako script
, ./script
, /home/user/bin/script
nebo cokoli jiného. Všechny argumenty se zobrazí jako "$1"
, "$2"
, "$3"
a tak dále. Počet argumentů je v proměnné shellu "$#"
.
Běžné způsoby, jak se s tím vypořádat, zahrnují příkazy shellu getopts
a shift
. getopts
je hodně podobný C getopt()
funkce knihovny. shift
přesune hodnotu $2
na $1
, $3
na $2
, a tak dále; $#
se sníží. Kód se nakonec podívá na hodnotu "$1"
, dělá věci pomocí case
…esac
rozhodnout o akci a poté provést shift
přesunout $1
na další argument. Vždy musí prozkoumat pouze $1
a možná $#
.