Вы наверное знаете, что мы можем задавать переменные внутри скриптов оболочки, чтобы обойтись без так называемого hard coding. Ниже — размерем как мы можем задавать значения для этих переменных.
Определение переменных в скрипте: назначение предопределенных значений переменным внутри скрипта.
Перед запуском скрипта: используются параметры задающие значения для переменных перед каждым запуском скрипта.
Во время работы скрипта: мы можем получить доступ к переменным прямо во время работы скрипта.
Все это решает разные задачи, когда требуется присвоить значения переменным. Команда чтения полезна для назначения переменных во время выполнения скрипта.
Изучаем команду READ на примерах
Синтаксис команды READ
read VARIABLE_NAME
для доступа к переменной указанной выше используется “$” или команда echo — если вы хотите вывести значение этой переменной.
echo "My variable is $VARIABLE_NAME"
Несколько примеров часто возникающих ситуаций использования команды READ
Пример 1: Чтение значения введенного пользователем. Для отображения этого значения используется echo, как уже было сказано ранее.
read VAR1 echo $VAR1
Вывод:
mirivlad@mirivlad:~⟫ read VAR1 mirivlad mirivlad@mirivlad:~⟫ echo $VAR1 mirivlad
Пример 2: Команда read может читать одно, два, и т.д. значений за раз.
read VAR1 VAR2
Вывод:
mirivlad@mirivlad:~⟫ read VAR1 VAR2 linux tux mirivlad@mirivlad:~⟫ echo $VAR1 linux mirivlad@mirivlad:~⟫ echo $VAR2 tux
Пример 3: Мы можем использовать команду read для чтения элементов из массива. Убедитесь что отделили каждый элемент пробелом. По умолчанию в оболочке используются пробелы для разделения элементов массива.
read ELEMENTS1 ARR1=($ELEMENTS1)
Для вывода первого элемента массива делаем так:
echo ${ARR1[0]}
Вывод:
mirivlad@mirivlad:~⟫ read ELEMENTS1 linux tux debian mirivlad@mirivlad:~⟫ ARR1=($ELEMENTS1) mirivlad@mirivlad:~⟫ echo ${ARR1[0]} linux mirivlad@mirivlad:~⟫ echo ${ARR1[1]} tux mirivlad@mirivlad:~⟫ echo ${ARR1[2]} debian
Пример 4: Мы можем прочесть множество значений из команды
read VAR1 VAR2 VAR3 << ( echo linux tux debian) echo "Enter values are $VAR1 $VAR2 $VAR3"
Пример 5: До этого момента мы увидели только ввод некоторых данных для данной переменной. Но при вводе данных мы можем предоставить некоторые значимые подсказки для пользователя. Этого можно добиться с помощью команд echo и read
Пример:
echo "Please enter your name" read NAME1
Вывод:
mirivlad@mirivlad:~⟫ echo "Please enter your name: " Please enter your name: mirivlad@mirivlad:~⟫ read NAME1 mirivlad mirivlad@mirivlad:~⟫ echo $NAME1 mirivlad
Пример 6: Мы можем активировать echo и читать команду из приведенного выше примера с опцией -p для чтения. Этот параметр печатает полезное сообщение для пользователя.
mirivlad@mirivlad:~⟫ read -p "Please enter your name: " NAME1 Please enter your name: mirivlad mirivlad@mirivlad:~⟫ echo "My name is $NAME1" My name is mirivlad
Еще несколько примеров использования опции -p
Вывод:
mirivlad@mirivlad:~⟫ read -p "Please enter your name: " NAME1 Please enter your name: mirivlad mirivlad@mirivlad:~⟫ echo "My name is $NAME1" My name is mirivlad mirivlad@mirivlad:~⟫ read -p "Give your first and last names: " FNAME1 LNAME1 Give your first and last names: mirivlad mirv mirivlad@mirivlad:~⟫ echo "My first name is $FNAME1, and my last name is $LNAME1" My first name ismirivlad, and my last name is mirv mirivlad@mirivlad:~⟫ read -p "Give your first, middle and the last names: " NAME1 Give your first, middle and the last names: mirivlad Vladimir mirv mirivlad@mirivlad:~⟫ ANAME1=($NAME1) mirivlad@mirivlad:~⟫ echo "My first name is ${ANAME1[0]}, middle name is ${ANAME1[1]}, and last name is ${ANAME1[2]}" My first name is mirivlad, middle name is Vladimir, and last name is mirv
Пример 7: У read есть встроенная переменная называемая REPLY. Это системная переменная которая хранит значение в $REPLY.
read -p "Please enter a value." echo "Enter value is $REPLY"
Пример 8: Как получить некоторое значение не отображая вывод в терминале? Используйте -s которое подавляет вывод echo.
read -ps "Please enter the password: " PASS
Вывод:
Please enter the password: