-->

Командная строка Linux

На нашем литературном портале можно бесплатно читать книгу Командная строка Linux, Шоттс Уильям-- . Жанр: ОС и Сети. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале bazaknig.info.
Командная строка Linux
Название: Командная строка Linux
Дата добавления: 16 январь 2020
Количество просмотров: 712
Читать онлайн

Командная строка Linux читать книгу онлайн

Командная строка Linux - читать бесплатно онлайн , автор Шоттс Уильям

Книга Уильяма Шоттса "Командная строка Linux: Полное руководство" представляет обширный обзор «жизни» в командной строке Linux. В отличие от других книг, посвященных одной программе, такой как командный интерпретатор bash, в этой книге автор попытается рассказать, как поладить с интерфейсом командной строки в более широком аспекте. Как он работает? Что можно сделать с его помощью? Как лучше его использовать? Эта книга не об администрировании системы Linux. Эта книга исключительно о Linux. В книге материал излагается в тщательно выверенной последовательности, как в школе, где учитель руководит вами и направляет вас по правильному пути. Многие авторы грешат тем, что подают материал в «систематическом» порядке, имеющем определенный смысл для писателя, но способном вызывать путаницу у начинающих пользователей. Цель данной книги — познакомить вас с идеологией Unix, которая отличается от идеологии Windows.

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала

1 ... 90 91 92 93 94 95 96 97 98 ... 113 ВПЕРЕД
Перейти на страницу:

-t секунды

Предельное время ожидания. Завершить ввод по истечении указанного числа секунд. По истечении указанного интервала read вернет ненулевое значение

-u дескриптор

Произвести ввод из файла с указанным дескриптором вместо стандартного ввода

В простейшем случае read сохраняет значения полей, прочитанные со стандартного ввода, в указанные переменные. Ниже показано, как можно было бы изменить наш сценарий проверки целочисленных значений, задействовав в нем команду read:

#!/bin/bash

# read-integer: проверка целочисленного значения.

echo -n "Please enter an integer -> "

read int

if [[ "$int" =~ ^-?[0-9]+$ ]]; then

        if [ $int -eq 0 ]; then

                echo "$int is zero."

        else

                if [ $int -lt 0 ]; then

                        echo "$int is negative."

                else

                        echo "$int is positive."

                fi

                if [ $((int % 2)) -eq 0 ]; then

                        echo "$int is even."

                else

                        echo "$int is odd."

                fi

        fi

else

        echo "Input value is not an integer." >&2

        exit 1

fi

Сначала мы использовали команду echo с параметром -n (подавляющим вывод символа перевода строки в конце) для вывода приглашения к вводу, а затем коман­ду read для ввода значения в переменную int. Запуск этого сценария приводит к следующим результатам:

[[email protected] ~]$ read-integer

Please enter an integer -> 5

5 is positive.

5 is odd.

Команда read может сохранять ввод в множестве переменных, это показано в следующем сценарии:

#!/bin/bash

# read-multiple: чтение нескольких значений с клавиатуры

echo -n "Enter one or more values > "

read var1 var2 var3 var4 var5

echo "var1 = '$var1'"

echo "var2 = '$var2'"

echo "var3 = '$var3'"

echo "var4 = '$var4'"

echo "var5 = '$var5'"

Этот сценарий вводит, присваивает переменным и выводит до пяти значений. Обратите внимание, как действует команда read, когда получает разное число значений:

[[email protected] ~]$ read-multiple

Enter one or more values > a b c d e

var1 = 'a'

var2 = 'b'

var3 = 'c'

var4 = 'd'

var5 = 'e'

[[email protected] ~]$ read-multiple

Enter one or more values > a

var1 = 'a'

var2 = ''

var3 = ''

var4 = ''

var5 = ''

[[email protected] ~]$ read-multiple

Enter one or more values > a b c d e f g

var1 = 'a'

var2 = 'b'

var3 = 'c'

var4 = 'd'

var5 = 'e f g'

Если read получит число значений меньше, чем ожидается, переменные, для которых не хватило значений, останутся пустыми, а при избыточном количестве значений на входе последняя переменная получит весь остаток введенной строки.

Если не передать переменные команде read, весь ввод будет сохранен в переменной командной оболочки REPLY:

#!/bin/bash

# read-single: чтение множества значений в переменную по умолчанию

echo -n "Enter one or more values > "

read

echo "REPLY = '$REPLY'"

Запуск этого сценария приводит к следующим результатам:

[[email protected] ~]$ read-single

Enter one or more values > a b c d

REPLY = 'a b c d'

Параметры

read поддерживает параметры, перечисленные выше в табл. 28.1.

Множество поддерживаемых параметров открывает доступ к довольно интересным способам использования read. Например, параметр -p позволяет определить строку приглашения к вводу:

#!/bin/bash

# read-single: чтение множества значений в переменную по умолчанию

read -p "Enter one or more values > "

echo "REPLY = '$REPLY'"

Параметры -t и -s позволяют писать сценарии, реализующие ввод «секретных» данных и прерывающие ввод по истечении заданного времени:

#!/bin/bash

# read-secret: ввод секретного пароля

if read -t 10 -sp "Enter secret passphrase > " secret_pass; then

        echo -e "nSecret passphrase = '$secret_pass'"

else

        echo -e "nInput timed out" >&2

        exit 1

fi

Сценарий предлагает пользователю ввести секретный пароль и ждет 10 секунд. Если в течение этого времени ввод не был завершен, сценарий завершается с кодом ошибки. Поскольку в команду включен параметр -s, символы пароля не выводятся на экран в процессе ввода.

Выделение полей в строке ввода с помощью IFS

Обычно командная оболочка выполняет разбиение ввода на слова перед передачей его команде read. Как мы уже знаем, это означает, что слова во вводе, разделенные одним или несколькими пробелами, становятся отдельными значениями и присваиваются командой read разным переменным. Такое поведение командной оболочки регулируется переменной с именем IFS (от Internal Field Separator — внутренний разделитель полей). По умолчанию переменная IFS хранит символы пробела, табуляции и перевода строки, каждый из которых может служить разделителем полей.

Изменяя значение переменной IFS, можно управлять делением ввода на поля перед передачей команде read. Например, файл /etc/passwd хранит строки данных, в которых поля отделяются друг от друга двоеточием. Присвоив переменной IFS значение, состоящее из единственного двоеточия, можно с помощью read прочитать содержимое /etc/passwd и благополучно разделить строки на поля для присваивания разным переменным. Ниже приводится сценарий, который именно так и действует:

#!/bin/bash

# read-ifs: чтение полей из файла

FILE=/etc/passwd

read -p "Enter a username > " user_name

file_info=$(grep "^$user_name:" $FILE) (1)

if [ -n "$file_info" ]; then

        IFS=":" read user pw uid gid name home shell <<< "$file_info" (2)

        echo "User      = '$user'"

        echo "UID       = '$uid'"

        echo "GID       = '$gid'"

        echo "Full Name = '$name'"

        echo "Home Dir. = '$home'"

        echo "Shell     = '$shell'"

else

        echo "No such user '$user_name'" >&2

        exit 1

fi

Этот сценарий предлагает пользователю ввести имя учетной записи в системе и затем выводит разные поля, найденные в соответствующей записи в файле /etc/passwd. В сценарии есть две интересные строки. Первая, отмеченная знаком (1), присваивает результат команды grep переменной file_info. Регулярное выражение гарантирует извлечение из файла /etc/passwd единственной строки, соответствующей введенному имени пользователя.

Вторая интересная строка, отмеченная знаком (2), состоит из трех частей: присваивания значения переменной, команды read со списком имен переменных в виде аргументов и незнакомого нам, нового оператора перенаправления. Рассмотрим сначала присваивание значения переменной.

Командная оболочка позволяет выполнять в одной строке одно или несколько операций присваивания значений переменным непосредственно перед командой, на поведение которой эти переменные влияют. Они изменяют окружение, в котором выполняется команда. Действие этих операций присваивания носит временный характер, окружение изменяется только на время выполнения команды. В данном случае в переменной IFS сохраняется символ двоеточия. То же самое можно выразить иначе:

OLD_IFS="$IFS"

1 ... 90 91 92 93 94 95 96 97 98 ... 113 ВПЕРЕД
Перейти на страницу:
Комментариев (0)
название