I have tried to create a bash script which has a case menu, that calls a function when chosen:
#!/bin/bash
# Menu
PS3='Vælg en funktion: '
options=("1: fileSplitter" "2: rowGrepper" "3: grepCounter?" "4: exit")
select opt in "${options[@]}"
do case $opt in "1: fileSplitter") fileSplitter ;; "2: rowGrepper") rowGrepper ;; "3: grepCounter?") grepCounter ;; "4: exit") break ;; *) echo "$REPLY er ikke tilgængeligt.." ;; esac
done
# Functions
function fileSplitter() { echo "fileSplitter function"
}
function rowGrepper() { echo "rowGrepper function"
}
function grepCounter() { echo "grepCounter"
}But when choosing option one, two or three that calls the specified functions, i get the error: fileSplitter: command not found
21 Answer
Thank you, the problem was caused by the order of menu and functions. It works perfectly when stating the functons before the menu:
#!/bin/bash
#Functions:
function fileSplitter() { echo "fileSplitter function"
}
function rowGrepper() { echo "rowGrepper function"
}
function grepCounter() { echo "grepCounter"
}
# Menu:
PS3='Vælg en funktion: '
options=("1: fileSplitter" "2: rowGrepper" "3: grepCounter?" "4: exit")
select opt in "${options[@]}"
do case $opt in "1: fileSplitter") fileSplitter ;; "2: rowGrepper") rowGrepper ;; "3: grepCounter?") grepCounter ;; "4: exit") break ;; *) echo "$REPLY er ikke tilgængeligt.." ;; esac
doneResult:
./csv_helper.sh
1) 1: fileSplitter
2) 2: rowGrepper
3) 3: grepCounter?
4) 4: exit
Vælg en funktion: 1
fileSplitter function 0