Общие переменные окружения
PATH - Устанавливает путь поиска для любой исполняемый командой. Аналогично переменной PATH в MSDOS.
HOME - домашний каталог пользователя.
MAIL - Содержит путь к месту хранрения почты пользователя.
IFS - Содержит строку символов, которые используются как разделители в командной строке. Строка, как правило, состоит из пробела, табуляции и символы новой строки. Чтобы увидеть их придется сделать восьмеричный дамп следующим образом:
$ echo $IFS | od -bc
PS1 и PS2 - Основное и вторичное приглашение в bash. PS1 устанавливается $ по умолчанию и PS2 установлен в '>'. Чтобы увидеть вторичное, просто запустите команду:
$ $ ls |
... и нажмите ввод.
USER - имя пользователя для входа.
TERM - обозначает тип терминала который используется. Должно быть настроены правильно для редакторов типа vi для правильной работаты.
SHELL - определяет тип оболочки, которую видит пользовательпри входе в систему.
Примечание: Чтобы узнать какие значения имеют проведенные выше переменные окружения, выполните команду echo c именем переменной начинающиееся с $. Например:
$ echo $USER
ravi
... получаем значение хранящееся в переменной USER.
Некоторые bash shell scripting правила
1) В первой строке вашего скрипта должено быть
#!/bin/bash
... то есть сначала #, затем !, затем путь до оболочки. Эта линия позволяет узнать расположение файла оболочки.
2) Перед выполнением скрипта, вы должны сделать скрипт исполняемым. Делается это следующей командой:
$ chmod ugo+x your_shell_script.sh
3) Обычно скрипт имеет расширение .sh. Это позволяет пользователю понять, что файл является скриптом.
Условные выражения
Выражение 'if'
:
if condition_is_true
then
execute commands
else
execute commands
fi
if также позволяет ветвления. То есть вы можете оценить несколько условий, если предыдущие условия отклонены.
if condition_is_true
then
execute commands
elif another_condition_is_true
then
execute commands
else
execute commands
fi
Пример:
if grep "linuxhelp" thisfile.html
then
echo "Found the word in the file"
else
echo "Sorry no luck!"
fi
if дополняется - test Тест оценит выражение справа, и возвращает либо верно или неверно. Для этого используется следующие операторы:
Операторы сравнения
-eq Равно
-le Меньше или равно
Тест файлов ж-файл р-файл ж-файл - х файл - д файл ы-файл True если файл существует и имеет размер больше чем ноль.
-f file True если file существует и является обычным файлом
-r file True если file существует и доступен для чтения
-w file True если file существует и доступен на запись
-x file True если file существует и является исполняемым
-d file True если file существует и является каталогом
-s file True если файл существует и имеет размер больше
чем ноль.
Тестирование строк
-n str True, если строка str не равна null
-z str True, если строка str равна null
str1 == str2 True если обе строки равны
str1 != str2 True если строки не равны
str True, если строке str присвлено значение
и не равно null
Тест также позволяет проверять более одного выражения в одной строке.
-a Аналогично AND
-o Аналогично OR
Пример:
test $d -eq 25 ; echo $d
... что означает, если значение в переменной d равено 25, в выводим значение.
test $s -lt 50; do_something
if [ $d -eq 25 ]
then
echo $d
fi
В вышеприведенном примере я использовал квадратные скобки, вместо ключевого слова test - это еще один способ сделать то же самое.
if [ $str1 == $str2 ]
then
do something
fi
if [ -n "$str1" -a -n "$str2" ]
then
echo 'Both $str1 and $str2 are not null'
fi
... если обе строки не являются равными null затем выполняем команду echo. Несколько вещей, которые нужно помнить при использовании test Если вы используете квадратные скобки [], вместо test, то необходимо вставить пробел после [ и перед ]. Примечание: test проверяет только целые значения. Дробные просто усекаются. Не используйте маски для тестирования равенства строки.
Выражение case Case является вторым условным выражением поддерживаемым оболочкой. Синтаксис:
case expression in
pattern1) execute commands ;;
pattern2) execute commands ;;
...
esac
Ключевыми словами здесь являются case и esac. ';;' используется в качестве окончания вариант. Также использует ')', чтобы отделить шаблон от действий. Пример:
...
echo "Enter your option : "
read i;
case $i in
1) ls -l ;;
2) ps -aux ;;
3) date ;;
4) who ;;
5) exit
esac
Примечание: В последнем случае ;; не требуется, но если хотите, то можете их поставить. Вот еще один пример:
case `date |cut -d" " -f1` in
Mon) commands ;;
Tue) commands ;;
Wed) commands ;;
...
esac
Case также поддерживает в выражении более чем один шаблон в каждом варианте. Вы также можете использовать wild-cards для сопоставления шаблонов.
...
echo "Do you wish to continue? (y/n)"
read ans
case $ans in
Y|y) ;;
[Yy][Ee][Ss]) ;;
N|n) exit ;;
[Nn][Oo]) exit ;;
*) echo "Invalid command"
esac
В приведенном случае, если вы введете Yes, YES, yEs и любую их комбинацию, то значение будет найдено.
Циклы
Цикл while
Синтаксис:
while condition_is_true
do
execute commands
done
Пример:
while [ $num -gt 100 ]
do
sleep 5
done
while :
do
execute some commands
done
Выше код реализует бесконечный цикл. Вы также можете написать 'в то время как справедливо' вместо 'а:'. Здесь я хотел бы ввести два ключевых слова в связи с looping условные. Они перерыв и продолжить. Перерыв - Это ключевое слово вызывает контроль вырваться из петли. далее - Это ключевое слово будет приостанавливать исполнение всех заявлений после него и выключатели контроль верхней части петли для следующей итерации.
Цикл until
Цикл выполняется пока выражение не станет ложным. Синтаксис:
until false
do
execute commands
done
Пример:
...
until [ -r myfile ]
do
sleep 5
done
Вышеуказанный код выполняется повторно до тех пор, пока файл myfile может быть прочитан.
Цикл for
Синтаксис:
for variable in list
do
execute commands
done
Пример:
...
for x in 1 2 3 4 5
do
echo "The value of x is $x";
done
Выводистя пять чиесл от 1 до 5. Вот еще один пример:
for var in $PATH $MAIL $HOME
do
echo $var
done
Предположим, у вас есть каталог с файлами java и вы хотите скомпилировать их. Вы можете написать скрипт, например такой:
...
for file in *.java
do
javac $file
done
Примечание: Вы можете использовать wild-card выражения в ваших скриптах.
Несколько специальных символов и их значения w.r.t shell scripts
$* - Это означает, что все параметры передаются скрипт
на момент его исполнения.. Что включает в себя $ 1, $ 2
и так далее.
$0 - Имя выполняемого скрипта.
$# - Количество аргументов, указанных в командной строке.
$? - Выходной статус последней команды.
Выше приведенные символы известны, как позиционные параметры (positional parameters). Позвольте мне объяснить позиционные параметры с помощью примера. Предположим у меня есть скрипт с названием my_script.sh. Теперь выполним этот скрипт в командной строке следующее:
$ ./my_script.sh linux is a robust OS
... как вы можете видеть выше, я указал 5 параметров скрипта. В соответствии с этим сценарием, значения позиционных параметров состоят в следующем: $ * - "linux ',' является ',' ',' надежных ',' OS". $ 0 - my_script.sh - имя скрипт время казнен. $ # - $ $ - $ 1 - $ 2 - $* - будет содержать значения 'linux','is','a','robust','OS'.
$0 - будет содержать значение my_script.sh - имя скрипта во время исполнения.
$# - содержит значения 5 - общее количество параметров.br>
$1 - содержит значения 'linux'
$2 - содержит значение 'is'
... и так далее. Операторы set и shift
set - позволяет связать значения с позиционными параметрами.
Например, попробуйте следующее:
$ set `date`
$ echo $1
$ echo $*
$ echo $#
$ echo $2
shift Пример:
$ set `date`
$ echo $1 $2 $3
$ shift
$ echo $1 $2 $3
$ shift
$ echo $1 $2 $3
Чтобы узнать ID процесса текущего оболочки, попробуйте следующее:
$ echo $$
2667
Для проверки, что это одно и то же значение, выполните следующие команды:
$ ps -f |grep bash
Оператор read
Сделайте ваш скрипт интерактивным. read позволит пользователю ввести значения, пока скрипт выполняется. Когда программа ждет ввода, она останавливается. Введенный через клавиатуру id считывается, и выполнение программы продолжается.
Например:
#!/bin/sh
echo "Enter your name : "
read name
echo "Hello $name , Have a nice day."
Выходной статус последней команды
Каждая команда возвращает значения после выполнения. Эта величина называется статус выхода или возвращаемое значение команды. Команда сообщает true, если выполняется успешно, и false, если нет. Это может быть проверено в скрипте, используя $?.