1

Название говорит само за себя. После того, как мне предложат, я хочу да и нет, чтобы соответственно вызвать функцию.

# 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

Если пользователь вводит "y", я хочу, чтобы скрипт вызывал функцию "new". Как и сейчас, скрипт попытается запустить программу под названием "new", которая не существует. ЛОЛ. Спасибо

2 ответа2

2

Вам нужно определить свои функции, прежде чем вызывать их:

# 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
0

Предполагая, что это bash, каждая строка в вашем скрипте будет читаться от наименьшего к наибольшему. IE "Строка 1, затем строка 2, затем строка 3 и так далее. Имея это в виду, вы можете создать в скрипте много-много функций и вызывать их каждую сразу за другой следующим образом:

#!/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

Однако, чтобы вызвать каждую функцию, вызов всегда должен быть после определения следующим образом:

#!/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

Это поможет лучше использовать функции в более сложных сценариях. Надеюсь, это помогло.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .