Код
sed -i 's/^M//' filename.txt
При вводе ^ M
в команде не используйте shift + 6 & M
.
Вы должны использовать ctrl + v + м
.
Вы можете сделать это, сохранив регистр switch внутри функции.
function testCase ()
{
read -r -p "Would you like to continue [Y/N] : " i
case $i in
[yY])
echo -e "Resuming the script";;
[nN])
echo -e "Skipped and exit script"
exit 1;;
*)
echo "Invalid Option"
testCase
;;
esac
}
testCase
Если ввод недействителен, функция будет вызывать функцию до тех пор, пока не будет получен допустимый ввод.
Вводите данные в цикле. Выйдите из цикла с помощьюbreak
(или exit
, в зависимости от случая ), если вы получите действительный ответ от пользователя.
while true; do
read -p 'Continue? yes/no: ' input
case $input in
[yY]*)
echo 'Continuing'
break
;;
[nN]*)
echo 'Ok, exiting'
exit 1
;;
*)
echo 'Invalid input' >&2
esac
done
В качестве функции полезности:
ask_continue () {
while true; do
read -p 'Continue? yes/no: ' input
case $input in
[yY]*)
echo 'Continuing'
break
;;
[nN]*)
echo 'Ok, exiting'
exit 1
;;
*)
echo 'Invalid input' >&2
esac
done
}
Разновидность служебной функции, которая позволяет выйти через EOF (, например. нажав Ctrl+D):
ask_continue () {
while read -p 'Continue? yes/no: ' input; do
case $input in
[yY]*)
echo 'Continuing'
return
;;
[nN]*)
break
;;
*)
echo 'Invalid input' >&2
esac
done
echo 'Ok, exiting'
exit 1
}
Здесь есть три выхода из цикла:
break
выходим из цикла и выполняем exit 1
. read
возникает из-за чего-то вроде обнаружения конца -ввода -или какой-либо другой ошибки, и в этом случае exit 1
выполняется. Вместо exit 1
вы можете использовать return 1
, чтобы разрешить вызывающему абоненту решать, что делать, когда пользователь не хочет продолжать. Вызывающий код может выглядеть как
if ! ask_continue; then
# some cleanup, then exit
fi
Почему бы просто не повторить прочитанное?
unset i
while [[ ! "$i" =~ ^[yYnN]$ ]]; do read -r -p "Would you like to continue [Y/N] : " i; done
until [ "$i" = "0" ]
do
read -r -p "Would you like to continue [Y/N] : " i
case $i in
[yY])
echo -e "Resuming the script";;
[nN])
echo -e "Skipped and exit script"
exit 1;;
*)
echo "Invalid Option"
;;
esac
done