acb094e9064f53d7b9e4e39d4b8d34e9.ppt
- Количество слайдов: 28
Linux: Потоки ввода/вывода: стандартный ввод, стандартный вывод и стандартный вывод ошибок. Для перенаправления стандартного ввода можно использовать символ <, для стандартного вывода – > или >> (с добавлением), для потока ошибок – 2> program > file. log Конвейер команд: program 1 | program 2 | program 3… Фоновый режим: program &
Linux • cat файл 1 файл 2. . . файл. N > файл_результата (конкатенация файлов в файл_результата) • ls -a > новый_файл (файл, содержащий список всех файлов текущей директории) • cat > новый_файл (создает новый текстовый файл с именем новый_файл и содержимым, которое пользователь введет с клавиатуры) • sort < textfile ( подаст на ввод sort данные из файла ) • info cat > cat. info 2> cat. stderr • info cat > cat. info 2>&1 ( направить стандартный вывод ошибок туда же, куда и стандартный вывод ) • info cat > cat. info 2> /dev/null • cat. info | less
Linux • Подсчет • Стандартная утилита для подсчета строк, слов и символов - wc (от англ. "word count" - "подсчет слов") – wc – c (bytes count) – wc –l (lines count) – wc –w(words count) • Пример (посчитать свои файлы) • find. | wc -l
Linux • • • cut - команда выборки отдельных полей из строк файла – Для выделения колонок из файла используйте формат: cut -fполе(я) формат – -d, вы можете выбрать различные разделители полей $ cat phone Shari French Yes 614 -764 -1112 Jo Somers No 614 -764 -1113 Mona Cole уes 614 -764 -1114 Jackie Bell yes 201 -457 -1112 $ cut -f 2, 4 phone French 614 -764 -1112 Somers 614 -764 -1113 Cole 614 -764 -1114 Bell 201 -457 -1112
Linux • $ cat race Reynolds: WINNER: est: 22: 45 Stultz: LOSER: est: 24: 12 French: TIE: est: 28: 16 • cut -d: -f 1, 2 race Reynolds: WINNER Stultz: LOSER French: TIE
Linux • ПОИСК В ФАЙЛЕ С ПОМОЩЬЮ КОМАНДЫ grep • grep -опции шаблон_поиска имя_файла(ов) Опции команды grep (можно сочетать) Опция -i игнорирует различие верхнего и нижнего регистров. Опция -c отображает число строк, содержащих шаблон поиска. Опция -l сообщает только имена файлов содержащих шаблон. Опция -v отображает все строки НЕ соответствующие шаблону. Опция -n предваряет каждую найденную строку номером строки.
Linux • • • $ cat parts_file C 1987653 Wing Nut Wafer Supplies. 83 360 C 2345643 3/4" nut RC Electronics. 42 120 Z 2365432 1/4" nut Global House. 25 620 Z 2367654 1/5“muff RC Electronics. 25 540 $ grep nut parts* C 2345643 3/4" nut RC Electronics. 42 120 Z 2365432 1/4" nut Global House. 25 620 $ grep -i nut parts_file C 1987653 Wing Nut Wafer Supplies. 83 360 C 2345643 3/4" nut RC Electronics. 42 120 Z 2365432 1/4" nut Global House. 25 620 $ grep -ic nut parts 1
Синтаксис языка shell • Файл начала сеанса (login - файл) • Независимо от версии Shell при входе в систему UNIX ищет файл начала сеанса с предопределенным именем, чтобы выпол - нить его как командный файл; – для UNIX версии 7 это: . profile; – для C-Shell это: . login и/или. cshrc. • В этот файл обычно помещают команды: – – установки характеристик терминала; оповещения типа who, date; установки каталогов поиска команд (обычно: /bin, /usr/bin); смена подсказки с $ на другой символ и т. д.
Синтаксис языка shell • Процедура языка Shell • Это командный файл. Два способа его вызова на выполнение: • $ sh dothat (где dothat - некоторый командный файл); • $ chmod 755 dothat (сделать его выполнимым, т. е. • -rwxr-xr-x) • $ dothat
Синтаксис языка shell • Комментарии Строки, начинающиеся с #, трактуются как комментарии. Переменные и подстановка их значений Все переменные в языке shell - текстовые. Их имена должны начинаться с буквы и состоять из латинских букв, цифр и знака подчеркивания (_). Чтобы воспользоваться значением переменной, надо перед ней поставить символ $. Различается два класса переменных: позиционные и с именем. Позиционные переменные - это аргументы командных файлов, их именами служат цифры: $0 - имя команды, $1 - первый аргумент и т. д. Значения позиционным переменным могут быть присвоены и командой set
Синтаксис языка shell • Пример. После вызова программы на shellе, хранящейся в файле ficofl: • ficofl -d / test. for значением • $0 будет ficofl, $1 - -d, $2 - /, $3 - test. for, значения остальных позиционных переменных будут пустыми строками. • Еще две переменные хранят командную строку за исключением имени команды: $@ эквивалентно $1 $2. . . , а $* - "$1 $2. . . ".
Синтаксис языка shell • Следующие переменные автоматически устанавливаются shell'ом: • # - количество позиционных параметров (десятичное) • - - флаги, указанные при запуске shellа или командой set • ? -десятичное значение, возвращенное предыдущей синхронно выполненной командой • $ - номер текущего процесса • ! - номер последнего асинхронного процесса • @ - эквивалентно $1 $2 $3. . . • * - эквивалентно "$1 $2 $3. . . " • Пример: выдать номер текущего процесса: • echo $$
Синтаксис языка shell • Переменные Shell • В языке Shell определение переменной содержит имя и значение: • var = value. • Доступ к переменной - по имени со знаком $ спереди: • Пример • fruit = apple (определение); • echo $fruit (доступ); • apple (результат echo). Таким образом, переменная - это строка. Возможна конкатенация строк: • $ fruit = apple • $ fruit = pine$fruit • $ echo $fruit • pineapple
Синтаксис языка shell • Предопределенные переменные Shell • Наиболее употребительные: • HOME - "домашний" каталог пользователя; служит аргументом по умолчанию для cd; • PATH - множество каталогов, в которых UNIX ищет команды; • PS 1 - первичная подсказка (строка) системы (по умолчанию - $). Изменение PS 1 (подсказки) обычно делается в login - файле, например: PS 1 = ? или PS 1 = "? " (с пробелом). • PS 2 -дополнительная строка приглашения (по умолчанию - > )
Синтаксис языка shell • • • Установка переменной Shell выводом из команды Пример 1: $ now = `date` (где `` - обратные кавычки) $ echo $now Sun Feb 14 12: 00: 01 PST 2010 $ Пример 2: (получение значения переменной из файла): $ menu = `cat food` $ echo $menu apples cheddar chardonnay (символы возврата каретки за- меняются на пробелы).
Синтаксис языка shell • Управляющие конструкции • Команда - это либо простая команда, либо одна из управляющих конструкций. Кодом завершения команды является код завершения ее последней простой команды. • Условный оператор. • if <список 1> then <список 2> [ elif <список 3> then <список 4> ] . . . [ else <список 5> ] fi
Синтаксис языка shell • if test $# -eq 0 then echo "You must give a parameters" exit 1 else cat filename fi • Здесь test и exit - команды проверки и выхода.
Синтаксис языка shell • Команда "test" • Не является частью Shell, но применяется внутри Shell- процедур. Имеется три типа проверок: – оценка числовых значений; – оценка типа файла; – оценка строк. • • Для каждого типа свои примитивы (операции op). Для чисел синтаксис такой: N op M, где N, M - числа или числовые переменные; op принимает значения: -eq, -ne, gt, -lt, -ge, -le
Синтаксис языка shell • Команда "test " • • Для файла синтаксис такой: op filename, где op принимает значения: -s (файл существует и не пуст); -f (файл, а не каталог); -d (файл-директория (каталог); -w (файл для записи); -r (файл для чтения).
Синтаксис языка shell • Команда "test " • Для строк синтаксис такой: • S op R, где S, R - строки или строковые переменные или op 1 S • op принимает значения: – = (эквивалентность); – != (не эквивалентность); • op 1 принимает значения: – -z (строка нулевой длины); – -n (не нулевая длина строки). Наконец, несколько проверок разных типов могут быть объ- единены логическими операциями -a (AND) и -o (OR).
Синтаксис языка shell • Оператор цикла while • Синтаксис: while <команда> do <команды> done Если "команда" выполняется успешно, то выполнить "команды", завершаемые ключевым словом done.
Синтаксис языка shell • Пример: if test $# -eq 0 then echo "Usage: $0 file. . . " > &2 exit fi while test $# -gt 0 do if test -s $1 then sort (процедуры) else echo "no file $1" > &2 fi shift (* перенумеровать аргументы *) done команда shift сдвигает имена на остальные аргументы
Синтаксис языка shell • Оператор цикла until • Инвертирует условие повторения по сравнению с while • Синтаксис: until <команда> do <команды> done Пока "команда" не выполнится успешно, выполнять команды, завершаемые словом done.
Синтаксис языка shell • Пример: if test S# -eq 0 then echo "Usage $0 file. . . " > &2 exit fi until test S# -eq 0 do if test -s $1 then sort (процедура) else echo "no file $1" > &2 fi shift (сдвиг аргументов) done
Синтаксис языка shell • Оператор выбора case • Синтаксис: case in string 1) <если string = string 1, то выполнить все следующие команды до ; ; > ; ; string 2) <если string = string 2, то выполнить все следую- щие команды до ; ; > ; ; string 3). . . и т. д. . esac
Синтаксис языка shell • • Пусть процедура имеет опцию -t, которая может быть подана как первый параметр: together = no case $1 in -t) together = yes shift ; ; -? ) echo "$0: no option $1" exit ; ; esac if test $together = yes then sort. . . fi где ? - метасимвол (если -? , т. е. "другая" опция, отличная от -t, то ошибка). Можно употреблять все метасимволы языка Shell, включая ? , *, [-]. Легко добавить (в примере) другие опции, просто расширяя case.
Синтаксис языка shell • Выполнение арифметических операций: expr • Команда expr вычисляет значение выражения, поданного в качестве аргумента и посылает результат на стандартный вывод. • Наиболее интересным применением является выполнение операций над переменными языка Shell. • Пример суммирования 3 чисел: • $ cat sum 3 expr $1 + $2 + $3 • $ chmod 755 sum 3 • $ sum 3 13 49 2 64 • $
Синтаксис языка shell Пример непосредственного использования команды: $ expr 13 + 49 + 2 + 64 + 1 129 $ В expr можно применять следующие арифметические операторы: +, -, *, /, % (остаток). Все операнды и операции должны быть разделены пробелами. • Заметим, что знак умножения следует заключать в кавычки (одинарные или двойные), например: '*', так как символ * имеет в Shell специальный смысл. • •