Выход сценария Bash при повторении в выполнении двойного щелчка

Это - мой код

#!/bin/bash
function boo {

    function goo {
        echo "Please enter name"
            read name;
        echo "Hello $name"

    }

    function xoo {

        echo "Please enter number"
        read numl;
        echo "$numl"
    }

    read -p "`echo $'\n> \n>'`  Name N or Number S`echo $'\n> \n>'`" var
        if [[ $var =~ [nN](es)* ]]
            then    
                goo   
                elif [[ $var =~ [sS](es)* ]]
                then
                xoo
                fi

}
boo
read -p "`echo $'\n> \n>'`  To Repeat press Y`echo $'\n> \n>'`" prompt
if [[ $prompt =~ [yY](es)* ]]
then
boo    
else
echo""
fi

Первоначально я могу успешно запустить этот скрипт путем двойного щелчка, но когда я пытался повторить его его выход

> 
>  Name N or Number S
> 
>n
Please enter name
john
Hello john

> 
>  To Repeat press Y
> 
>y

> 
>  Name N or Number S
> 
>n
Please enter name
ajay

Я могу распечатать привет Джона, но когда я ввожу ajay его выход. Какая-либо идея, что происходит

1
задан 29 July 2015 в 06:01

1 ответ

Ваша проблема if…then. После того, как первые отзывают boo, Вы проверяете, что значение prompt и boo будет запущено, если prompt будет y. После этого больше нет кода для выполнения и выходы сценария.

Используя этот сценарий

#!/bin/bash
function boo {
    function goo {
        echo "Please enter name"
        read -r name;
        echo "Hello $name"
    }

    function xoo {
        echo "Please enter number"
        read -r numl;
        echo "$numl"
    }

    read -rep  <час> 

Пример

% ./foo

> 
> Name N or Number S 
> 
> N
Please enter name
abc
Hello abc

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
def
Hello def

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
jjj
Hello jjj

> 
> To Repeat press Y 
> 
> n
%
\n> \n> Name N or Number S \n> \n> ' var if [[ $var =~ [nN](es)* ]]; then goo elif [[ $var =~ [sS](es)* ]]; then xoo fi } while true; do boo read -rep <час>

Пример

% ./foo

> 
> Name N or Number S 
> 
> N
Please enter name
abc
Hello abc

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
def
Hello def

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
jjj
Hello jjj

> 
> To Repeat press Y 
> 
> n
%
\n> \n> To Repeat press Y \n> \n> ' prompt if [[ ! $prompt =~ [yY](es)* ]]; then break fi done exit 0
<час>

Пример

% ./foo

> 
> Name N or Number S 
> 
> N
Please enter name
abc
Hello abc

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
def
Hello def

> 
> To Repeat press Y 
> 
> y

> 
> Name N or Number S 
> 
> N
Please enter name
jjj
Hello jjj

> 
> To Repeat press Y 
> 
> n
%
1
ответ дан 7 December 2019 в 16:12

Другие вопросы по тегам:

Похожие вопросы: