Como outros disseram, você não pode fazer isso.
Mas se você quiser organizar o código em um arquivo para que o programa principal esteja no topo do arquivo e outras funções sejam definidas abaixo, você pode fazê-lo com uma função main
separada.
Por exemplo
#!/bin/sh
main() {
if [ "$1" = yes ]; then
do_task_this
else
do_task_that
fi
}
do_task_this() {
...
}
do_task_that() {
...
}
main "$@"; exit
Quando chamamos main
no final do arquivo, todas as funções já estão definidas. A passagem explícita de "$@"
para main
é necessária para tornar visíveis os argumentos da linha de comando do script na função.
O exit
explícito na mesma linha que a chamada para main não é obrigatório, mas pode ser usado para impedir que um script em execução fique confuso se o arquivo de script for modificado. Sem ele, o shell tentaria continuar lendo os comandos do arquivo de script após main
retornar. (veja Como ler o script de shell inteiro antes de executá-lo? )