Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Vojtěch Hutla 23. 03. 2014, 16:55:49

Název: BASH: volání funkce pomocí proměnné
Přispěvatel: Vojtěch Hutla 23. 03. 2014, 16:55:49
Zdravím,
mám skript, který obsahuje několik jednoduchých funkcí. Rád bych tyto funkce volal pomocí proměnných, např.

   ./muj-skript.sh archivuj

zavolá funkci archivuj, která by v tomhle případě vytvořila archiv.
Ale nevím, jak docílit, aby skript funkci zavolal. Nevíte někdo, jak na to?
Název: Re:BASH - Jak zavolat funkci pomocí proměnné?
Přispěvatel: Jimm 23. 03. 2014, 17:07:30
Tomu se říká parametry a ve scriptu je získáš takto: $0

Ale začal bych u "Bash for dummies".
Název: Re:BASH - Jak zavolat funkci pomocí proměnné?
Přispěvatel: DK 23. 03. 2014, 18:56:18
Tomu se říká parametry a ve scriptu je získáš takto: $0

Ale začal bych u "Bash for dummies".

Byt vami, tak zacnu u nejake ucebnice cestiny, autor topicu hleda dle popisu funkci eval, tudiz staci pouzit
Kód: [Vybrat]
eval $1(uz jenom proto, ze prvni argument je nazev spousteneho scriptu, tak potrebuje druhy)


nejaka funkcni ukazka treba tady
Kód: [Vybrat]
#!/bin/bash

prvni(){
  echo "Prvni funkce"
}

druha(){
  echo "Druha funkce"
}


eval $1

a pro kontrolu, zda funkce existuje, jde pouzit napr declare (declare -F "nazevfunkce" vrati "nazevfunkce", pokud existuje)
Název: Re:BASH - Jak zavolat funkci pomocí proměnné?
Přispěvatel: someone 23. 03. 2014, 19:10:24
Kód: [Vybrat]
eval $1

Ale fuj, eval na neosetreny vstup je zlo, pak nekdo zavola ./muj-script.sh "rm -rf /" a bude po srande.

Co takhle stary dobry switch?
Kód: [Vybrat]
case "$1" in
  archivuj)
    do_stuff;
    ;;
esac
Název: Re:BASH - Jak zavolat funkci pomocí proměnné?
Přispěvatel: DK 23. 03. 2014, 20:05:28
...
Ale fuj, eval na neosetreny vstup je zlo, pak nekdo zavola ./muj-script.sh "rm -rf /" a bude po srande.
...

no to je :) zapomnel jsem to tam napsat... ono inspirovat se autor muze treba v init scriptech, tam se tohle pouziva bezne (switch)