Читаем Искусство программирования на языке сценариев командной оболочки полностью

Команда passwd может использоваться в сценариях, но это плохая практика.

#!/bin/bash

# set-new-password.sh: Плохая идея.

# Этот сценарий должен запускаться пользователем root,

#+ а еще лучше -- не запускать его вообще.

ROOT_UID=0 # $UID root = 0.

E_WRONG_USER=65 # Не root?

if [ "$UID" -ne "$ROOT_UID" ]

then

echo; echo "Только root может запускать этот сценарий."; echo

exit $E_WRONG_USER

else

echo; echo "Вам не следовало бы запускать этот сценарий."

fi

username=bozo

NEWPASSWORD=security_violation

echo "$NEWPASSWORD" | passwd --stdin "$username"

# Ключ '--stdin' указывает 'passwd'

#+ получить новый пароль со stdin (или из конвейера).

echo; echo "Пароль пользователя $username изменен!"

# Использование команды 'passwd' в сценариях -- опасно.

exit 0

ac

Выводит время работы пользователей, основываясь на записях в файле /var/log/wtmp. Это одна из утилит пакета GNU acct.

bash$ ac

total 68.08

last

Выводит информацию о последних входах/выходах пользователей в ситему, основываясь на записях в файле /var/log/wtmp. Эта команда может отображать информацию об удаленных (в смысле -- с удаленного терминала) соединениях.

newgrp

Позволяет сменить активную группу пользователя. Пользователь остается в системе и текущий каталог не изменяется, но права доступа к файлам вычисляются в соответствии с новыми реальным и эффективным идентификаторами группы. Эта команда используется довольно редко, так как пользователь, обычно, является членом нескольких групп.

Терминалы

tty

Выводит имя терминала текущего пользователя. Обратите внимание: каждое отдельное окно xterm считается отдельным терминалом.

bash$ tty

/dev/pts/1

stty

Выводит и/или изменяет настройки терминала. Эта сложная команда используется в сценариях для управления поведением терминала.

<p><strong>Пример 13-1. Установка символа "забоя"</strong></p>

#!/bin/bash

# erase.sh: Использование команды "stty" для смены клавиши "забоя" при чтении ввода.

echo -n "Как Вас зовут? "

read name # Попробуйте стереть последние символы при вводе.

# Все работает.

echo "Вас зовут $name."

stty erase '#' # Теперь, чтобы стереть символ нужно использовать клавишу "#".

echo -n "Как Вас зовут? "

read name # Попробуйте стереть последние символы при вводе с помощью "#".

echo "Вас зовут $name."

exit 0

<p><strong>Пример 13-2. невидимый пароль: Отключение эхо-вывода на терминал</strong></p>

#!/bin/bash

echo

echo -n "Введите пароль "

read passwd

echo "Вы ввели пароль: $passwd"

echo -n "Если кто-нибудь в это время заглядывал Вам через плечо, "

echo "то теперь он знает Ваш пароль."

echo && echo # Две пустых строки через "and list".

stty -echo # Отключить эхо-вывод.

echo -n "Введите пароль еще раз "

read passwd

echo

echo "Вы ввели пароль: $passwd"

echo

stty echo # Восстановить эхо-вывод.

exit 0

Перехват нажатия на клавиши с помощью stty.

<p><strong>Пример 13-3.</strong></p>

#!/bin/bash

# keypress.sh: Определение нажатых клавиш.

echo

old_tty_settings=$(stty -g) # Сохранить прежние настройки.

stty -icanon

Keypress=$(head -c1) # или $(dd bs=1 count=1 2> /dev/null)

# для других, не GNU, систем

echo

echo "Была нажата клавиша \""$Keypress"\"."

echo

stty "$old_tty_settings" # Восстановить прежние настройки.

# Спасибо, Stephane Chazelas.

exit 0

См. также Пример 9-3.

терминалы и их режимы работы

Как правило, терминалы работают в каноническом режиме. Когда пользователь нажимает какую-либо клавишу, то соответствующий ей символ не сразу передается программе, исполняемой в окне терминала. Этот символ поступает сначала в локальный буфер терминала. Когда пользователь нажимает клавишу ENTER, то тогда все содержимое буфера передается программе.

bash$ stty -a

speed 9600 baud; rows 36; columns 96; line = 0;

intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ; eol2 = ;

start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

...

isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt

В каноническом режиме можно использовать символы редактирования во время ввода.

bash$ cat > filexxx

whaIfoo barhello world

bash$ cat filexxx

hello world

bash$ bash$ wc -c < file

13

Процесс в терминале получит только 13 символов (12 алфавитных символов и символ перевода строки), хотя пользователь нажал 26 клавиш.

В неканоническом ("сыром") режиме, каждая нажатая клавиша (включая специальные символы редактирования, такие как ctl-H) сразу же передается исполняющемуся в терминале процессу.

Под управлением Bash, базовый терминальный редактор заменяется более сложным терминальным редактором Bash. Например, если вы нажмете комбинацию клавиш ctl-A в командной строке Bash, то вы не увидите символов ^A, которые выводит терминал, вместо этого Bash получит символ \1, проанализирует его и переместит курсор в начало строки.

Stephane Chazelas

tset

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных