Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Операционная система FreeBSD. Освой самостоятельно.


Служба Рассылок Subscribe.Ru проекта Citycat.Ru
Здравствуйте

"Операционная система FreeBSD. Освой самостоятельно."

Выпуск 28 от 29.05.2001

Интерактивные интерфейсы пользователей

Управление ходом выполнения. Циклы
Передача аргументов. Команда shift
Упражнение

Управление ходом выполнения. Циклы

Управлять ходом выполнения сценария на языке bash можно, используя кострукцию операторов if-fi. Оператор if имеет вид:

if <условие 1>; then

<список операторов 1>

elif <условие 2>; then

<список операторов 2>

else

<список операторов 3>

fi

Работает эта конструкция так:

Если выполнено <условие 1>, то выполняется <список операторов 1>.

Если невыполнено <условие 1>, но выполнено <условие 2>, то выполняется <список операторов 2>.

Если невыполнено <условие 1> и невыполнено <условие 2>, то выполняется <список операторов 3>.

В конструкции if-fi операторы elif и else являются необязательными.

В качестве условия проверки может быть использована любая команда (или список команд). Тогда условие будет считаться выполненным, если команда (список команд) завершилась с кодом 0 (т.е. выполнилась нормально). Но на практике чаще используют команду test для проверки какого-либо выражения. Команда test записывается так:

test <выражение> или же [<выражение>]. Ниже приводится список опций, используемых при выполнении команды test.

-d file Истинно, если файл file существует и является директорией.

-e file Истинно, если файл file существует.

-f file Истинно, если файл file существует и является обычным файлом.

-k file Истинно, если файл file существует и для него установлен sticky-бит.

-L file Истинно, если файл file существует и является символической ссылкой.

-r file Истинно, если файл file существует и его можно читать.

-s file Истинно, если файл file существует и имеет ненулевой размер.

-t file Истинно, если файл file открыт на терминале.

-w file Истинно, если файл file существует и в него можно записывать.

-x file Истинно, если файл file существует и является выполняемым.

-O file Истинно, если файл file существует и принадлежит текущему пользователю.

file1 -nt file2 Истинно, если файл file1 создан (изменен) позднее, чем файл file2.

file1 -ot file2 Истинно, если файл file1 создан (изменен) раньше, чем файл file2.

-z <строка> Истинно, если длина строки <строка> равна нулю.

-n string Истинно, если длина строки <строка> не равна нулю.

string1 = string2 Истинно, если строки равны.

string1 != string2 Истинно, если строки не равны.

! <выражение> Истинно, если выражение ложно.

<выражение1> -a <выражение2> Истинно, если оба выражения истинны.

<выражение1> -o <выражение2> Истинно, если хотя бы одно из выражений истинно.

<число1> -eq <число2> Истинно, если число <число1> равно числу <число2>.

<число1> -ne <число2> Истинно, если число <число1> не равно числу <число2>.

<число1> -lt <число2> Истинно, если число <число1> меньше числа <число2>.

<число1> -le <число2> Истинно, если число <число1> меньше или равно числа <число2>.

<число1> -gt <число2> Истинно, если число <число1> больше числа <число2>.

<число1> -ge <число2> Истинно, если число <число1> больше или равно числа <число2>. Числами <число1> и <число2> могут быть положительные и отрицательные целые числа.

Пример:

if [ -x /usr/games/pool ] ; then

/usr/games/pool

else

echo "не могу запустить файл"

fi

Этот же пример можно записать по-другому:

[ -x /usr/games/pool ] && /usr/games/pool || echo "не могу запустить файл"



Циклы реализуются с помощью конструкций for, while.

Цикл for записывается так:

for <переменная> in <список>

do

<команды>

done

Пример 1:

for i in 1 2 3

do

echo $i

done

Пример 2:

for file in /etc/p*

do

echo $file

done

Этот цикл эквивалентен команде ls /etc/p*.

Цикл while имеет вид:

while <условие>

do

<команды>

done

Команды в теле цикла выполняются до тех пор, пока остается истинным <условие>.

Пример:

i=1

while [ $i -lt 5 ]

do

echo $i

i = $(($i+1))

# можно было бы написать i=expr $i + 1

done

Другим вариантом цикла while является until.

until <условие>

do

<команды>

done

В этом случае команды в теле цикла выполняются до тех пор, пока <условие> остается ЛОЖНЫМ.

i=1

until ! [ $i -lt 5 ]

do

echo $i

i=expr $i + 1

done



Заметим, что по команде break можно выйти из тела цикла. Это справедливо и для цикла for и для while (until). Пример:

i=1

while [ $i -gt 0 ]

do

echo $i

i=expr $i + 1

if [ $i -eq 10 ] ; then

break

fi

done

Передача аргументов. Команда shift.

При запуске на выполнение, сценарию можно передать аргументы в командной строке. Например:

# /usr/games/pool file1.txt user1

Для того, чтобы можно было работать с переданными аргументами, существует девять переменных - $1, $2, : , $9. Они позиционно соответствуют переданным аргументам. Т.е. в нашем примере $1 содержит строку "file.txt", а $2 содержит строку "user1". Кроме того, в переменной $# содержится количество переданных аргументов. В нашем случае - 2.

Но что делать, если нужно передать, скажет, 15 аргументов ? Как получить доступ к аргументу с номером больше 9 ?

Для этой цели существует команда shift, которая просто осуществляет сдвиг аргументов на одну позицию <влево>. Т.е. $1 получает значение $2, $2 - $3 и т.д. При этом значение, которое было в $1 до сдвига - теряется. При этом сдвиге так же уменьшается на 1 значение $#.

Рассмотрим это на примере. Создайте такой файл

#!/usr/local/bin/bash

i=1

while [ $# -eq 0 ]

do

echo "Аргумент $i - $1"

shift

i=expr $i + 1

done

Назовите его, например, my_shift.

Запустите его так:

# my_shift p1 p2 p3 p4



На экране вы увидете:

Аргумент 1 - p1

Аргумент 2 - p2

Аргумент 3 - p3

Аргумент 4 - p

Упражнения


1. Создайте в своей домашней директории несколько файлов с произвольным текстом.

2. Напишите скрипт, который бы принимал в качестве параметров имена этих файлов и добавлял их содержимое в файл, который передан первым в командной строке.

3. Запустите скрипт. Затем откройте файл-приемник, и проверьте, все ли правильно работает?

Ответ (пример скрипта):

#!/usr/local/bin/bash

if [ $# -gt 1 ] ; then

file=$1

i=$#

shift

while [ $# -eq 0 ]

do

cat $1 >> $file

shift

done

echo "Всего к файлу $file добавлено expr $i - 1 файлов"

else

echo "Недостаточно аргументов"

fi

 
Обязательно посетите наш сервер в интернет - http://www.anriintern.com/ 
Сайт этой рассылки http://www.anriintern.com/computer/freebsd/
На форуме http://www.anriintern.com/forum/ можно обсудить все возникающие у Вас вопросы.

Юмор

 

Вопросы.

Примите участие в формировании нашей рассылки. Задавайте свои вопросы, отвечайте на вопросы других подписчиков, поделитесь опытом, расскажите, что Вы знаете. Если Вы знаете анекдоты или забавные истории относящиеся к FreeBSD то поделитесь и ими. Спасибо всем, кто ответил на часть вопросов предыдущей рассылки. Те, кто хочет узнать предыдущие вопросы и ответы на них посетите наш форум - http://www.anriintern.com/forum/
 
Вопрос:
1. Как настроить анонимный Ftp сервер ?
2. Если делать для пользователей, то как настроить строго определенный каталог для каждого пользователя?
Ответить:
 
Вопрос:
Как можно достигнуть ограничения на размер mailbox с помощью локального мейлера (mail.local)?
Ответить:
 
Вопрос:
>>некоторие проблеми при компиляции нового ядра - последствия дефицита знаний в FreeBSD.<< После "успешной" компиляции ядра и переименовании старого # make install оказалось что необходимо обратиться к старому ядру. На попытку в command prompt загрузиться со старого ядра я получил след.сообщение : can't boot "kernel.old" kernel module already loaded. что делать ? заранее благодарен !!!
Ответить:
 
Вопрос:
Возможен ли в принципе сабж, если принтер доступен по Самбе? Клиент самбовский стоит, но в доках ничего про печатьименно на другую самбу не нашёл. Плохо искал?
Ответить:
 
Вопрос:
Захотелось мне поставить что-нибудь получше окошек и из всего многообразия линухов и юнихов выбрал Фрю: во-первых бесплатно, во-вторых хелп подвернулся вот на этом сайте. Нашел версию 4.11 на компакте, даже загрузочном, почитал инфу, подготовил на всякий случай дискеты и принялся устанавливать. Окошки решил не убирать, а просто подправил диск, выделив под нондос партишн 2Гб и дальше в соответствии с рекомендациями www.anriintern.com загрузился, пропустил пункт конфигурации ядра и дальше по пунктам инфы. Инсталяция завершилась и мне было предложеноперезагрузиться, вынув все из дисководов, но при загрузке появилась надпись Boot kernel, а затем, немного погодя еще одна no kernel и ВСЕ!!! Я конечно во фре ламер, но хоть кто-нибудь, ПОМОГИТЕ!!!. не хочу всю жизнь в Окнах губить
Ответить:
 
Выберите действие:
Ваше имя: 
Ваш e-mail:
Ваш вопрос, сообщение, опыт или юмор напишите сюда:
 
 
Подпишитесь на наши рассылки на Subscribe.Ru
Английский язык в пословицах и поговорках
Сленг, афоризмы и разговорная речь в английском языке.
Английский язык через британские мифы, легенды и сказки.
Топики для изучающих английский язык.
Альтернативные методы изучения иностранных языков
Все об иностранных языках
Европейское страноведение
Современные английские термины из области электроники
Операционная система FreeBSD. Освой самостоятельно.
Начинаем изучать С++
Путешествие в прошлое (Исторические рассказы)
Маркетинг. Бизнес в сетях. Бесплатный интернет курс.
 

Новости сервера бесплатного дистанционного образования:

21/05/2001 Начал работать курс лекций по Windows, Word и Excel
26/04/2001 Начал работать курс лекций - Управление офисом
26/04/2001 Вышла бета-версия программы English Tutor 1.2
25/04/2001 Новая серия русских кроссвордов, основанная на словаре Даля
16/04/2001 Начал работать курс лекций Гипертекст - симптом перелома эпохи
16/04/2001 Начал работать курс лекций - Концепции современного естествознания
16/04/2001 Начал работать Интернет справочник по грамматике Американского варианта Английского языка.
15/04/2001 Вышел в свет релиз 1.2.0 программы запоминания иностранных слов EZ Memo Booster
27/03/2001 Японские кроссворды на сервере дистанционного образования
16/03/2001 Курс латинского языка
16/03/2001 Полезные советы по работе с компьютером
16/03/2001 Другие берега, новый сайт об отдыхе, работе, обучении и жизни за рубежом!
16/03/2001 Клавиатурный тренажёр для быстрого освоения десятипальцевого метода слепой печати
12/03/2001 Выложены новые словари для EZ Memo Booster
26/02/2001 Программа изучения неправильных глаголов английского языка
 

Наши предложения:

 
Дистанционное образование в Великобритании по Интернету на Русском языке.

Создавая сайт "Дистанционное обучение в Великобритании по Интернету" мы ставили перед собой несколько задач. Прежде всего сделать западное образование доступным. Во-вторых, упор мы сделали на преодоление самого главного барьера для русскоговорящих - языкового. Мы финансировали перевод учебных пособий на русский язык. В-третьих, посредством Интернета мы можем обеспечить высококачественную поддержку учебного процесса. Не секрет, что в провинции найти опытного квалифицированного преподавателя сложно. А Интернет дает возможность общения студента и преподавателя безотносительно от их места жительства.
Все курсы, которые мы предлагаем сертифицированы британскими учебными или профессиональными заведениями. Например, после каждого экзамена в ИБАМ вы получаете Сертификат, после сдачи пяти экзаменов, вы получаете Диплом или Диплом с отличием. Подробнее здесь.

 

Предложение к преподавателям и специалистам в разных областях науки и техники.

Если вы имеете знания и можете поделиться ими с другими, напишите нам письмо. У нас разработана программа поддержки и спонсирования любых обучающих проектов от игры на гитаре до тренировок управления пилотируемым спутником. Подробнее здесь.

 
Предложение к владельцам сайтов.

Сервер дистанционного образования "Anri education systems" приглашает все сайты имеющие отношение к любым видам обучения к объединению. Вместе мы сможем добиться гораздо больших результатов. Об этом говорит вся история человечества. Посмотрите на нее - когда люди объединялись для достижения определенных целей, то они добивались их и создавали великие империи. У нас есть средства (как физические, так и материальные), у Вас есть знания и информация. Так давайте объединимся и создадим империю образования! Мы считаем, что надо больше делать, чем говорить, по этому - к делу. Подробнее здесь.
 
Дизайн, программирование.

Мы можем создать именно то, что Вы хотите, более того, обладая высоко квалифицированным персоналом и современным оборудованием, опираясь на самые передовые технологии, мы создадим для Вас по настоящему интерактивный и автоматизированный сайт. Мы занимаемся разработкой и созданием Web-страниц и Web-серверов разных стилей и содержания. Мы можем выработать концепцию и создать для Вас Web-сайт - Ваше представительство или виртуальный офис в Интернет. Мы предоставляем весь спектр услуг, связанный с созданием, размещением, рекламой и дальнейшей поддержкой, созданного WEB-сайта. Узнать больше можно здесь.

Сервер дистанционного образования

Работа для всех!

Web-design студия Kety

Конкурс с призами



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Relayed by Corbina
Рейтингуется SpyLog

В избранное