
Допустим, у меня есть такой скрипт:
#!/bin/bash
PS3='Select option: '
options=("Option one" "Option two")
select opt in "${options[@]}"
do
case $opt in
"Option one")
# few lines of code
if [ "check that code did everything it was supposed to do" ]
then
echo "Completed"
else
echo "Something went wrong"
fi
;;
"Option two")
# more code
;;
esac
done
Теперь можно ли изменить строку echo "Something went wrong"
на команду, которая будет выполняться мгновенно, Option two
без повторного показа меню PS3?
решение1
То, что вы ищете, называется "fall-through", и в case
операторах bash fall-through выполняется с использованием ;&
вместо ;;
. Однако вы не можете выполнить условный fall-through (то есть вы не можете вставить a ;&
в середину блока if
). Я предлагаю вам всегда выполнять fall-through, и continue
если код выполнен успешно:
case $opt in
"Option one")
# few lines of code
if [ "check that code did everything it was supposed to do" ]
then
echo "Completed"
continue
else
echo "Something went wrong"
fi
;&
"Option two")
# more code
;;
esac