BASH: volání funkce pomocí proměnné

Vojtěch Hutla

BASH: volání funkce pomocí proměnné
« kdy: 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?
« Poslední změna: 24. 03. 2014, 11:26:03 od Petr Krčmář »


Jimm

Re:BASH - Jak zavolat funkci pomocí proměnné?
« Odpověď #1 kdy: 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".

DK

Re:BASH - Jak zavolat funkci pomocí proměnné?
« Odpověď #2 kdy: 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)

someone

Re:BASH - Jak zavolat funkci pomocí proměnné?
« Odpověď #3 kdy: 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

DK

Re:BASH - Jak zavolat funkci pomocí proměnné?
« Odpověď #4 kdy: 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)