На главную страницу | Новости | Ссылки | Контакты
p1 & p2 & p3 & -- запуск параллельно
p1; p2; p3; -- запуск последовательно
jobs -- список запущенных заданий
^C -- завершить программу
^Z -- приостановить выполение программы
bg %1 -- продолжить выполение в фоне
fg %1 -- перевести на передний план
% -- вернуться к последней остановленной программе
kill -CONT %1 -- послать сигнал CONT
#!/bin/sh -- путь к интерпретатору Bourne shell
#!/bin/bash -- путь к интерпретатору BASH
$1 - $9 - Это так называемые позиционные параметры, служат для передачи аргументов командной строки. Если аргументов больше 9, то они должны заключаться в фигурные скобки{}
$0 - Имя скрипта который был запущен.
$# - Количество аргументов командной строки или позиционных параметров (имя скрипта не счит-ся)
$? - Код с которым была завершена предыдущая команда. Если команда была выполнена удачно,
то значение этой переменной будет 0, если же неудачно то не 0.
$$ - Номер процесса под которым исполняется данный скрипт, очень удобно использовать
в имени файла что бы сделать его уникальным.
$! - Номер последнего, запущенного в фоне процесса.
$- Список флагов переданных сценарию. Годиться разве что для проверки интерактивного режима.
$* - Данный параметр содержит в себе все параметры переданные из командной строки.
$@ - То же самое что $*, только каждый параметр представлен отдельно.
$_ - Специальная переменная, содержит последний аргумент предыдущей команды.
~Особенности:
-- нельзя вставлять лишние пробелы, если они там не предусмотрены (например, в a=$b );
";" -- означает "конец команды" (в конце строки не обязательна, но удобна).
a=33; -- присвоение переменной числового значения;
a='33'; a="33"; -- строковая переменная;
b=$a -- получение значения переменной по имени.
список операторов:
exit 1 -- выход из скрипта и возврат значения
export a -- экспортирует переменную в окружение (env)
cmd1 && cmd2 -- 2-ая команда выполняется, только если 1-ая завершилась успешно (TRUE)
cmd1 || cmd2 -- 2-ая команда выполняется, только если 1-ая завершилась неуспешно (FALSE)
{cmd1; cmd2; cmd3} -- группировка команд
#!/bin/bash
a=22;
b='33'; c=33;
echo $a; echo $b; echo $c;
"+", "-", "*", "/", "++" и "--" (работа в основном с целовыми числами)
$((expression)) -- для вычислений нужно брать выражение в двойные скобки и ставить $;
a=2; b=3;
d=$(($a+$b));
x=$((2*3));
~Замечание:
Аримф. операции также можно производить с помощью команды let:
let "c = a + b" #сложение
let "c = a / b" #деление
+ — сложение
— — вычитание
* — умножение
/ — деление
** — возведение в степень
% — модуль(деление по модулю), остаток от деления
сокращения: a +=b и т.д
test условие
или
[ условие ] (обязательно пробелы)
программа test возвращает:
0 = TRUE -- если условие выполняется
1 = FALSE -- если условие не выполняется
Для чисел:
[ "число" -eq "число" ]
-eq == (равно)
-ne != (не равно)
-gt >
-lt <
-ge >=
-le <=
Пример:
[ 10 -qt 5 ] -- 10>5
echo $? -- вывод кода завершения последней программы
Пример использования оператора if
if [ $res -eq "0" ]; then
echo "ok";
exit 0;
fi
~Сравнение строк:
if [ "333" = "333" ]; then echo 1; fi; - должны быть пробелы!
(1) s1 = s2
(2) s1 != s2
(3) s1 < s2
(4) s1 > s2
~Полная форма оператора if:
if [ условие ] # если новая строка, то ";" можно не писать
then
команды
else
команды
fi
case $variable in
pattern1)
commands
;;
pattern2|pattern3|pattern4)
commands
;;
*)
commands
;;
esac
* Циклы
for переменная in list
do
команды
done
Пример:
for x in 0 1 2
do
echo $x;
done
2) Используя раскрытие скобок (brace expansion) -- bash версии 3 и выше.
for a in {1..10}
do
echo -n "$a "
done
3) используя C-подобный синтаксис
for ((a=1; a <= LIMIT ; a++)) # Двойные круглые скобки и "LIMIT" без "$".
do
echo -n "$a "
done # Конструкция заимствована из 'ksh93'.
while [ условие ]
do
команда(-ы)...
done
при размещении ключевого слова do в одной строке с объявлением цикла, необходимо вставлять символ ";" перед do:
while [ условие ] ; do
while [ "$var0" -lt "$LIMIT" ]
# ^ ^
# Пробелы, так как используются квадратные скобки - аналог команды test . . .
do
echo -n "$var0 " # -n подавляет перевод строки.
# ^ Пробел, чтобы разделить выводимые числа.
var0=`expr $var0 + 1`
# var0=$(($var0+1)) также допустимо.
# var0=$((var0 + 1)) также допустимо.
# let "var0 += 1" также допустимо.
done
http://www.bash-scripting.ru/abs/chunks/ch10.html
или
#!/bin/bash
i=0
while [ $i -lt 22 ]
do
touch $i
i=$[$i+1]
done
${#string} - Длина строки
Извлечение подстроки:
${string:position} - с position до конца (нумерация с 0)
${string:position:length} - с position длиной length символов
${string: -length} - последние length символов
Удаление части строки:
${string#substring} - до первого с начала
${string##substring} - до последнего с начала
${string%substring} - до первого с конца
${string%%substring} - до последнего с конца
Замена подстроки:
${string/substring/replacement} - первое вхождение
${string//substring/replacement} - все вхождения
Примеры:
a="12345"; echo "${a}"; echo "${a:3}"; echo "${a#12}"; echo "${a/12/21}"
Объединение строк:
a="red";
b="bool";
echo $a $b; // результат: red bool
c="$a $b";
c=$a\ $b;
echo $c;
echo "$a $b"; // результат: red bool
echo '$a $b'; // результат: $a $b
т.е. кавычки " " обрабатывают спецсимволы, а апострофы ' ' нет.
------------------------------------
дескриптор название файла
0 -- stdin (станд. поток ввода)
1 -- stdout (станд. поток вывода)
2 -- stderr (станд. поток ошибок)
команда > файл -- направляет станд. поток вывода в новый файл
команда 1> файл -- (то же самое)
команда >> файл -- направляет станд. поток вывода в указанный файл (режим присоединения)
команда < файл -- в станд. вх. поток получает данные из указанного файла
команда << разделитель -- получает данные из stdin пока не встретит разделитель
echo "строка"
echo [оптии] "строка"
Оптии (для linux):
-n - запрет вывода символа новой строки
-e - активация управляющих символов (\c \f \ n \t)
Управляющие символы
\c - запрещает отображение концевого символа новой строки
\f - прогон страницы
\n - новая строка
\t - табуляция
function ИМЯ_ФУНКЦИИ () {
local x=0; # локальные переменные
команды тела функции
}
typeset -f -- Посмотреть список функций
unset -f -- "разопределить" функцию
Пример:
math(){
# local variable x and y with passed args
local x=$1
local y=$2
echo $(( $x + $y ))
}
вызов:
math 5 10
function myfunc()
{
local myresult='some value'
echo "$myresult"
}
result=$(myfunc) # or result=`myfunc`
echo $result
$RANDOM -- a random integer between 0 and 32767
tr [опция] набор1 [набор2] -- служит для перевода (замены) выбранных символов в другие символы или удаления их.
$ tr a b < file1.txt > file1.txt
Опция -d -- Используется для удаления из текста символов, перечисленных в наборе1.
$ echo a black cat | tr -d a
$ tr -d '\r' < ms.file < unix.file
Опция -с
Заставляет команду работать с символами, которые отсутствуют в наборе 1. Другими словами: символы, перечисленные в наборе1 не используются в работе, а все остальные - используются. Например:
$ echo a black cat | tr -cd b-z[:cntrl:][:blank:]
blck ct
xargs [-l число] [-i зам_цеп] [-n число] [-t] [-p] [-x] [-s размер] [-e [лконф_цеп]] [команда [начальный_аргумент…]]
xargs - утилита для формирования списка аргументов и выполнение команды в UNIX-подобных операционных системах. Команда xargs объединяет зафиксированный набор заданных в командной строке начальных аргументов с аргументами, прочитанными со стандартного ввода, и выполняет указанную команду один или несколько раз.
find -- используется для нахождения файлов и каталогов.
find [путь] [опции] [критерии поиска] [действия над файлами]
пр.,
find . -name "*page*"
find . -type f -name "~*" -print
find . -newer file.bak -type f -print
find . \( -name "~*" -or -name "temp*" \) -type f -prin
find . -perm 777 -- Найти все файлы с правами 777
find . -perm 777 | xargs rm -- Находим и удаляем все файлы с заданными правами
find ~ -name name.c | xargs chmod 777 -- Находим конкретный файл и меняем его права
-depth (или -d) Поиск в подкаталогах перед поиском в самом каталоге.
-L При поиске следовать по символическим ссылкам.
-maxdepth N При поиске проверять не более чем N вложенных уровней каталогов.
-mindepth N Не проверять вложенные каталоги уровня N и меньше.
-mount Не искать в каталогах других файловых систем.
. - каталог, откуда начинать поиск
* - любой набор символов
? - любой символ
Критерии поиска:
-name шаблон Имя файла (шаблон имени) без указания пути. Рекомендуется всегда заключать шаблон в кавычки.
-type C Файл типа C. Наиболее часто используемые значения для С: \
d — каталог, f — файл, l - символьная ссылка
Действия над файлами:
-exec команда \; Выполнить команду. Обратите внимание, что после команды ставится обратный слеш и точка с запятой.
print Вывод имени файла на экран.
-ls Выполнение команды ls -dils над текущим файлом.
http://pingvinus.ru/note/command-find
http://hashcode.ru/questions/95802/bash-список-файлов-в-каталоге-linux
grep - Поиск файлов или строки в файле по шаблону.
grep "шаблон поиска" "file_name"
-h Не выводит имя файла при поиске по нескольким файлам.
-r Поиск рекурсивно по всем файлам в указанной директории.
-l Выводит только имена файлов, в которых найдена строка. Если в файле есть несколько таких строк, то имя файла выводится только один раз.
Опция -q --quiet - silent Ничего не выдает на стандартный вывод.
Опция -s --no-messages
Примеры:
Поиск фалов в каталоге и во всех подкаталогах содержащих строку – «eval»
grep -i -n "eval" `find -name "*.php"`