Como faço para chamar a função após o prompt de entrada em um script de shell do Linux?

1

O título diz tudo. Depois que eu sou solicitado, quero sim e não para chamar uma função respectivamente.

# Check to see if you ran this script before

echo
echo I need to know if this is your first time...
while true; do
    read -p "" yn
        case $yn in
            [Yy]* ) new;;
            [Nn]* ) exit;;
                * ) echo "Please answer yes or no.";;
            esac
done

# Define function as new
new (){
    clear; echo As you are new, I will need a few things.
} 

# Define function as root

root(){
    echo "$(tput setaf 6)Hello, world$(tput sgr0)"
}
echo

Se o usuário inserir "y", quero que o script chame a função "new". Como está agora, o script tentará executar um programa chamado "novo" que não existe. RI MUITO. Obrigado

    
por rombreaker 21.05.2014 / 03:53

2 respostas

2

Você precisa definir suas funções antes de chamá-las:

# Define function as new
new (){
    clear; echo As you are new, I will need a few things.
} 

# Check to see if you ran this script before
echo
echo I need to know if this is your first time...
while true; do
    read -p "" yn
        case $yn in
            [Yy]* ) new;;
            [Nn]* ) exit;;
                * ) echo "Please answer yes or no.";;
            esac
done
    
por 21.05.2014 / 04:00
0

Assumindo que isso seja bash, cada linha do seu script será lida do menos para o maior. I.E. "Linha 1, linha 2, linha 3 e assim por diante. Com isso em mente, você pode criar muitas, muitas funções em um script e chamá-las uma após a outra assim:

#!/bin/bash

func_1() {
echo "Doing something."
}

func_2() {
echo "Doing something again."
}

func_3() {
echo "Doing something for the last time."
}

func_1
func_2
func_3

No entanto, para chamar cada função, a chamada sempre tem que ser após a definição assim:

#!/bin/bash

func_1() {
echo "Doing something."
}

func_2() {
echo "Doing something again."
}

func_3() {
echo "Doing something for the last time."
}

until [ "$SOMETHING" == "SOMETHING_1" ]
do
func_1
done

until [ "$SOMETHING_2" == "SOMETHING_3" ]
do
func_2
done

until [ "$SOMETHING_4" == "SOMETHING_5" ]
do
func_3
done

Isso ajudará a utilizar melhor as funções em seus scripts mais complexos. Espero que isso tenha ajudado.

    
por 14.05.2016 / 12:23