(1) s1 = s2
(2) s1 != s2
(3) s1 < s2
(4) s1 > s2
(5) -n s1
(6) -z s1
(1) s1 совпадает с s2
(2) s1 не совпадает с s2
(3) s1 в алфавитном порядке предшествует s2 (в соответствии с текущей локалью)
(4) s1 в алфавитном порядке следует после s2 (в соответствии с текущей локалью)
(5) s1 имеет ненулевое значение (содержит один символ или более)
(6) s1 имеет нулевое значение
Сравнение двух строк.
#!/bin/bash
S1='string'
S2='String'
if [ $S1=$S2 ];
then
echo "S1('$S1') не равна to S2('$S2')"
fi
if [ $S1=$S1 ];
then
echo "S1('$S1') равна to S1('$S1')"
fi
На данный момент, автор считает необходимым процитировать замечание из письма, полученного от Андреаса Бека, которое связано с использованием if [ $1 = $2 ].
Это не является хорошей идеей, так как если либо $S1, либо $S2 - пустая строка, Вы получите синтаксическую ошибку. Более приемлимым будет использование x$1 = x$2 или "$1" = "$2" .
+
-
*
/
% (remainder)
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
Программистам на C необходимо просто выбрать оператор, соответствующий выбранному оператору в скобках.
Этот раздел переписал Kees (смотрите раздел "Благодарность").
Некоторые из этих команд практически содержат полноценные командные языки. Здесь объясняются только основы таких команд. Для более подробной информации внимательно просмотрите man-страницы каждой команды.
sed (потоковый редактор)
Sed - это неинтерактивный редактор. Вместо того, чтобы изменять файл движением курсора на экране, следует использовать сценарий инструкций по редактированию для sed, а также имя редактируемого файла. Вы также можете рассматривать sed в качестве фильтра. Посмотрите на некоторые примеры:
$sed 's/to_be_replaced/replaced/g' /tmp/dummy
Sed заменяет строку 'to_be_replaced' строкой 'replaced', читая файл /tmp/dummy . Результат отправляется на стандартный вывод (обычно, на консоль), но Вы также можете добавить '> capture' в вышеуказанную строку, чтобы sed отправлял вывод в файл 'capture'.
$sed 12, 18d /tmp/dummy
Sed отображает все строки, за исключением строк с 12 по 18. Исходный файл этой командой не изменяется.
awk (манипулирование файлами данных, выборка и обработка текста)
Существует большое количество реализаций языка программирования AWK (наиболее распространенными интерпретаторами являются gawk из проекта GNU и "новый awk" mawk.) Принцип достаточно прост: AWK находится в поиске шаблона; для каждого подходящего шаблона выполняется какое-нибудь действие.
Автор повторно создал файл dummy, содержащий следующие строки:
"test123
test
tteesstt"
$awk '/test/ {print}' /tmp/dummy
test123
test
Шаблон, искомый AWK, это 'test', а действие, выполняемое AWK при обнаружении строки в /tmp/dummy с подстрокой 'test', это 'print'.
$awk '/test/ {i=i+1} END {print i}' /tmp/dummy
3
Если Вы находитесь в поиске нескольких шаблонов, замените текст между кавычками на '-f file.awk'. В этом случае, Вы можете записать все шаблоны и действия в файле 'file.awk'.
grep (выводит строки, соответствующие искомому шаблону)
Мы рассматривали несколько команд grep в предыдущих главах, которые отображали строки, соответствующие шаблону. Однако grep способен выполнять значительно большее.
$grep "look for this" /var/log/messages -c
12
Строка "look for this" была обнаружена 12 раз в файле /var/log/messages.
[ok, данный пример был фикцией, /var/log/messages был переделан :-)]
wc (считает строки, слова и байты)
В следующем примере можно заметить, что выводится не то, что мы ожидаем. В этом случае, файл dummy содержит следующий текст:
"bash introduction
howto test file"
$wc --words --lines --bytes /tmp/dummy
2 5 34 /tmp/dummy
wc не заботится о порядке параметров. Он всегда выводит их в стандартном порядке: <число строк><число слов><число байтов><имя файла>.
sort (сортирует строки текстового файла)
В этом случае, файл dummy содержит следующий текст:
"b
c
a"
$sort /tmp/dummy
Вывод выглядит следующим образом:
a
b
c
Команды не должны быть такими простыми :-)
bc (вычислительный язык программирования)
bc производит вычисления с командной строки (ввод из файла, но не через перенаправление или конвейер), а также из пользовательского интерфейса. Следующий пример показывает некоторые команды. Обратите внимание, что автор использовал bc с параметром -q, чтобы отказаться от вывода сообщения с приглашением.
$bc -q
1 == 5
0
0.05 == 0.05
1
5 != 5
0
2 ^ 8
256
sqrt(9)
3
while (i != 9) {
i = i + 1;
print i
}
123456789
quit
tput (инициализирует терминал или запрашивает базу данных terminfo)
Небольшая иллюстрация возможностей tput:
$tput cup 10 4
Приглашение командной строки появится в координатах (y10,x4).
$tput reset
Экран очищается и приглашение появляется в (y1,x1). Обратите внимание, что (y0,x0) - это левый верхний угол.
$tput cols
80
Отображает возможное количество символов в направлении по оси x.
Настоятельно рекомендуется быть с этими программами на "ты" (как минимум). Существует огромное количество небольших программ, которые предоставляют Вам возможность заняться настоящей магией в командной строке.
[Некоторые примеры были заимствованы из man-страниц или FAQ.]