Во время моего приключения в написании bash-скриптов я начал экспериментировать с функциями и хотел, чтобы пользователь взаимодействовал со скриптом посредством ввода с клавиатуры.
Итак, я создал этот короткий пример сценарий (см. ниже).
Мой вопрос сегодня заключается в следующем: является ли мой сценарий наиболее эффективным методом, то есть с использованием глобальной переменной, поскольку нельзя возвращать нецелочисленные значения из функция? ИЛИ, есть ли более эффективный метод достижения того же результата?
Функция под названием read_keyboard имеет два параметра: первый — это приглашение к сообщению, а второй — допустимые символы клавиатуры.
Ваши мысли и вклад очень ценны.
Спасибо!
#!/usr/bin/env bash
echo -e "\nBash version: ${BASH_VERSION}..."
echo -e "Shell location: ${SHELL}"
echo -e "Current directory: ${PWD}\n"
if [[ -f "diff-output.txt" ]]; then
echo -e "File 'diff-output.txt' already exists"
rm -i ./diff-output.txt
fi
echo -e "Creating a new file called 'diff-output.txt'\n"
echo "This temporary file called 'diff-output.txt' has been created." 1> diff-output.txt
# Global variables
ans=""
retval=""
declare -f read_keyboard
function read_keyboard {
echo "var1 = $1"
echo "var2 = $2"
echo ""
while true; do
read -r -n 1 -s -p "$1" ans
echo ""
echo -e "ans = ${ans}"
if [[ ${ans} == ["$2"] ]]; then
echo ""
break
else
echo -e "\nYou pressed an invalid key\n"
fi
done
return 0
}
echo -e "\nDo you want to see the contents of file 'diff-output.txt' ?\n"
read_keyboard "Press [Y]es or [N]o" "yYnN"
retval="$?"
echo -e "return value = $retval"
echo -e "You pressed: ${ans}"
if [[ ${ans} == [yY] ]]; then
echo ""
cat ./diff-output.txt
echo ""
fi
if [[ -f ./diff-output.txt ]]; then
rm -i ./diff-output.txt
fi
echo -e "\nExiting shell script...\n"
exit 0
Подробнее здесь: https://stackoverflow.com/questions/791 ... -method-ac