Теперь все, с чем у меня проблемы, это утверждения «да нет». Они не позволяют вводить данные, но выглядят так же, как остальные ...
mc_addplugin() {
if pgrep -u $USERNAME -f $SERVICE > /dev/null
then
echo "$SERVICE is running!"
echo "Please stop the service before adding a plugin."
else
echo "Paste the URL to the .JAR Plugin..."
read JARURL
JARNAME=$(basename "$JARURL")
echo "$JARNAME"
if [ -d "$TEMPPLUGINS" ]
then
as_user "cd $TEMPLUGINS && wget -A.jar -O ./$JARNAME $JARURL"
else
as_user "cd $PLUGINSPATH && mkdir $TEMPPLUGINS && cd $TEMPPLUGINS && wget -A.jar -O ./$JARNAME $JARURL"
fi
if [ -f "./$JARNAME" ]
then
as_user "cd $PLUGINSPATH"
if [ -f "./$JARNAME" ]
then
if `diff $PLUGINSPATH/$JARNAME $TEMPPLUGINS/$JARNAME >/dev/null`
then
echo "You are already running the latest version of $JARNAME."
NOW=`date "+%Y-%m-%d_%Hh%M"`
echo "Are you sure you want to overwrite this plugin? [Y/n]"
echo "Note: Your old plugin will be moved to the "$TEMPPLUGINS" folder with todays date."
select yn in "Yes" "No"; do
case $yn in
Yes ) as_user "mv $PLUGINSPATH/$JARNAME $TEMPPLUGINS/${JARNAME}_${NOW} && mv $TEMPPLUGINS/$JARNAME $PLUGINSPATH/$JARNAME && rm -rf $TEMPPLUGINS";
echo "Plugin has been install successfully!"; break;;
No ) echo "The plugin has not been installed! Removing temporary plugin and exiting..."
as_user "rm $TEMPPLUGINS/$JARNAME"; exit;;
esac
done
echo "Would you like to start the $SERVICE now? [Y/n]"
select yn in "Yes" "No"; do
case $yn in
Yes ) mc_start; break;;
No ) "$SERVICE not running! To start the service run: /etc/init.d/craftbukkit start"; exit;;
esac
done
else
NOW=`date "+%Y-%m-%d_%Hh%M"`
echo "Are you sure you want to overwrite this plugin? [Y/n]"
echo "Note: Your old plugin will be moved to the "$TEMPPLUGINS" folder with todays date."
select yn in "Yes" "No"; do
case $yn in
Yes ) as_user "mv $PLUGINSPATH/$JARNAME $TEMPPLUGINS/${JARNAME}_${NOW} && mv $TEMPPLUGINS/$JARNAME $PLUGINSPATH/$JARNAME && rm -rf $TEMPPLUGINS";
echo "Plugin has been install successfully!"; break;;
No ) echo "The plugin has not been installed! Removing temporary plugin and exiting..."
as_user "rm $TEMPPLUGINS/$JARNAME"; exit;;
esac
done
echo "Would you like to start the $SERVICE now? [Y/n]"
select yn in "Yes" "No"; do
case $yn in
Yes ) mc_start; break;;
No ) "$SERVICE not running! To start the service run: /etc/init.d/craftbukkit start"; exit;;
esac
done
fi
else
echo "Are you sure you want to add this new plugin? [Y/n]"
select yn in "Yes" "No"; do
case $yn in
Yes ) as_user "mv $PLUGINSPATH/$JARNAME $TEMPPLUGINS/${JARNAME}_${NOW} && mv $TEMPPLUGINS/$JARNAME $PLUGINSPATH/$JARNAME"; break;;
No ) echo "The plugin has not been installed! Removing temporary plugin and exiting..."
as_user "rm $TEMPPLUGINS/$JARNAME"; exit;;
esac
done
echo "Would you like to start the $SERVICE now? [Y/n]?"
select yn in "Yes" "No"; do
case $yn in
Yes ) mc_start; break;;
No ) "$SERVICE not running! To start the service run: /etc/init.d/craftbukkit start"; exit;;
esac
done
fi
else
echo "Failed to download the plugin from the URL you specified!"
exit;
fi
fi
}
При запуске вы получите что-то вроде:
You are already running the latest version of Vault.jar.
Are you sure you want to overwrite this plugin? [Y/n]
Note: Your old plugin will be moved to the /home/pyrexiacraft/server/plugins/temp_plugins folder with todays date.
1) Yes
2) No
#? y
select
ожидает, что вы введете соответствующий номер; 1 для Да или 2 для Нет в этом случае.
Тем не менее, фактическая строка, введенная пользователем, сохраняется в переменной с именем REPLY
, так что вы можете анализировать ее в дополнение к числам.
Я бы просто написал функцию для вопросов да / нет; запрос да / нет не совсем то, для чего select
предназначен. Что-то вроде
confirm() {
local answer
read -p "$1" -n1 answer
while [[ $answer && $answer != [YyNn] ]]; do
printf '\nPlease answer y or n\n' >&2
read -p "$1" -n1 answer
done
printf '\n'
[[ -z $answer || $answer = [Yy] ]]
}
#...
if confirm "Are you sure? [Y/n] "; then
printf 'Ok\n'
else
printf 'Fine, I will find something else to do\n'
fi
Y, y или ENTER приведут к возврату функции в true, а N или n - в функцию. Вы можете расширить его, чтобы принять значение по умолчанию в качестве второго аргумента.