Рубрики
bash

bash read

Считывание переменных с помощью read:


С помощью bash-команды read можно обрабатывать пользовательский ввод. 
Как правило, для этого сначала с помощью echo задается краткий текст, сообщающий пользователю, какой ввод ожидается (например, у/n, числовое значение и т. д.). 
При этом целесообразно использовать параметр -n, позволяющий вводить данные сразу же после текста echo, а не со следующей строки. 
При выполнении последующей команды read bash ожидает от пользователя ввода строки и нажатия клавиши Enter. 
Возьмем программу, в которой цикл while выполняется до тех пор, пока в переменной а не окажется последовательность символов, удовлетворяющая определенным условиям. 

В следующем примере мы видим, как работает эта программа:
user$ readvar 
Введите число: a
Не верный ввод, повторите ввод, пожалуйста 
Введите число: 13
13


После ввода информации с помощью read все содержимое переменной удаляется посредством подстановки параметров, 
если последовательность включает любые символы, кроме цифр, знаков «минус» и пробелов. 
Правда, эта система контроля не идеальна (в соответствии с ней допускается как последовательность символов 12-34-5, так и 1234), но все же весьма эффективна.

Скрипт readvar:

#! /bin/sh
# Пример readvar: считывание числового значения
a=                       # Удаление содержимого переменной а
while [ -z "$a" ]; do
 echo -n "Введите число: "
 read a  
 a=${a##*[^0-9,' ',-]*}  # Удаление последовательностей символов, 
                         # содержащих любые символы, кроме 0-9, знака "минус" и пробела 
 if [ -z "$a" ]; then
  echo "Неверный ввод, повторите ввод, пожалуйста "
 fi
done
echo $a