290 likes | 567 Views
Linux :. Потоки ввода/вывода : стандартный ввод, стандартный вывод и стандартный вывод ошибок. Для перенаправления стандартного ввода можно использовать символ < , для стандартного вывода – > или >> (с добавлением), для потока ошибок – 2> program > file.log Конвейер команд:
E N D
Linux: Потоки ввода/вывода: стандартный ввод, стандартный вывод и стандартный вывод ошибок. Для перенаправления стандартного ввода можно использовать символ <, для стандартного вывода – > или >> (с добавлением), для потока ошибок – 2> program > file.log Конвейер команд: program1 | program2 | program3… Фоновый режим: 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 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 -f2,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: -f1,2race Reynolds:WINNER Stultz:LOSER French:TIE
Linux • ПОИСК В ФАЙЛЕ С ПОМОЩЬЮ КОМАНДЫ grep • grep -опции шаблон_поиска имя_файла(ов) Опции команды grep (можно сочетать) Опция -i игнорирует различие верхнего и нижнего регистров. Опция -c отображает число строк, содержащих шаблон поиска. Опция -l сообщает только имена файлов содержащих шаблон. Опция -v отображает все строки НЕ соответствующие шаблону. Опция -n предваряет каждую найденную строку номером строки.
Linux • $ cat parts_file C1987653 Wing Nut Wafer Supplies .83 360 C2345643 3/4" nut RC Electronics .42 120 Z2365432 1/4" nut Global House .25 620 Z2367654 1/5“muff RC Electronics.25 540 • $ grep nut parts* C2345643 3/4" nut RC Electronics .42 120 Z2365432 1/4" nut Global House .25 620 • $ grep -i nut parts_file C1987653 Wing Nut Wafer Supplies .83 360 C2345643 3/4" nut RC Electronics .42 120 Z2365432 1/4" nut Global House .25 620 • $ grep -ic nut parts1<RET> 3 • $ grep -l nut par*<RET> parts1 parts2
Синтаксис языка 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 ищет команды; • PS1 - первичная подсказка (строка) системы (по умолчанию - $). Изменение PS1 (подсказки) обычно делается в login - файле, например: PS1 = ? или PS1 = "? " (с пробелом). • PS2 -дополнительная строка приглашения (по умолчанию - > )
Синтаксис языка 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 - строки или строковые переменныеили op1 S • op принимает значения: • = (эквивалентность); • != (не эквивалентность); • op1 принимает значения: • -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 string1) <если string = string1, то выполнить все следующие команды до ;; > ;; string2) <если string = string2, то выполнить все следую- щие команды до ;; > ;; string3) ... и т.д. ... 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 sum3 expr $1 + $2 + $3 • $ chmod 755 sum3 • $ sum3 13 49 2 64 • $
Синтаксис языка shell • Пример непосредственного использования команды: • $ expr 13 + 49 + 2 + 64 + 1 129 • $ • В expr можно применять следующие арифметические операторы: +, -, *, /, % (остаток). Все операнды и операции должны быть разделены пробелами. • Заметим, что знак умножения следует заключать в кавычки (одинарные или двойные), например: '*', так как символ * имеет в Shell специальный смысл.