#bash
#bash
Вопрос:
#!/bin/bash
#make your own choice,decide which function should be run
set -e
keyin(){
read -e -p "$1 input y,otherwise input n" local yorn
if [[ "y" == "$yorn" || "Y" == "$yorn" ]]; then
return 0
fi
}
fun1(){
keyin 'update software no.1'
echo 'how to exit this function?'
}
fun2(){
keyin 'update software no.2'
echo "fun2 is still running"
}
fun1
fun2
Когда я запускаю этот скрипт и ввожу данные y
, я хочу выйти fun1
и продолжить выполнение fun2
.
Как это сделать?
Заранее спасибо!
Ответ №1:
Как насчет обработки возвращаемого значения функции?
keyin() {
# read -e -p "$1 input y,otherwise input n" local yorn
yorn=n
if [[ "y" == "$yorn" || "Y" == "$yorn" ]]; then
return 0
fi
return 1 # return nonzero in case of error
}
fun1() {
# handle the return value - in case of non-zero execute custom action
if ! keyin 'update software no.1'; then
return
fi
echo 'how to exit this function?'
}
fun2() {
echo "fun2 is still running"
}
fun1
fun2
Просто if function; then
давайте выполним действие в зависимости от того, было ли возвращаемое значение функции нулевым или ненулевым.
Инструкция read .... local yorn
считывает значение в переменной с именем local
. Я думаю, вы имели в виду просто read .... yorn
без local
слова.
Комментарии:
1.
return 1
завершит работу всего скрипта из-заset -e
2. Инструкция
read .... local yorn
считывает переменную с именемyorn
,local
означающим локальную переменную.3. @kittygirl Нет, этого не будет.
set -e
завершите работу скрипта в случае «не обработанных» возвращаемых значений. Такfalse
завершится сценарий. Ноif false; then true; else true; fi
этого не произойдет, потому что операторif
возвращает истинное значение.if ... ; then ... fi;
Анализируется как один оператор дляset -e
. Возвращаемое значениеif
является последней выполненной командой, поэтомуif true; then false; fi
, тем не менее, скрипт завершит работу.4. @kittygirl Нет, это не так. Строка
local
вread .. local
интерпретируется как имя переменной. Вы хотитеlocal yorn; read ... yorn
.