Используются технологии uCoz
Используются технологии uCoz
главная->пример shell-скрипта 
    

Примеры типовых операций в bash-скриптах

1.Ввод-вывод, перенаправление
#!/bin/bash

# Любой shell-скрипт всегда начинается со строчки #!/bin/bash (или #!/bin/sh)
# Комментарии всегда начинаются со знака #

# Для того, чтоб вывести на экран сообщение, используем команду ECHO
echo "hello, world"

# а это пример форматированного вывода... почти как в Си
printf "форматированный вывод десять=%d строка=%s float=%f шестнадцатиричное_число=0x%X\n" 10 "строка" 11.56 234

# пример чтения ввода с клавиатуры
read A
echo $A
printf "
вы только что ввели слово: %s\n" "$A"

#перенаправление, конвейеры, получение результата вывода другой программы

# пример генерации пароля из 10 букв
PASSWORD1=`cat /dev/urandom | tr -d -c 'a-zA-Z0-9' | fold -w 10 | head -1`
echo Password=$PASSWORD1
#кавычки вида `` дают результат вывода на экран того, что внутри них (т.е. выполняется 
#программа или скрипт, написанные внутри таких кавычек и результат, выводимый ими на 
#стандартный вывод является результатом операции "обратные кавычки"

#в данном случае результатом является вывод конвейера из нескольких программ.
#операция | обозначает конвейер. Т.е. в нашем примере: 
#cat /dev/urandom выводит на стд.вывод содержимое файла /dev/urandom  (спец.файл для генерации псевдослуч.чисел)
#tr осуществляет трансляцию,т.е. заменяет одни байты другими (это нужно, чтоб избежать появления в пароле непе-
#чатаемых символов)
#fold разбивает то, что ей пришло на стд.ввод на строки длиной 10 символов и выводит это на стд.вывод
#head -1 выводит первую строчку того, что ей пришло на стандартный ввод.

# или так:
PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c10`
echo Password=$PASSWORD2

Не забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему, добавив возможность исполнения файла, например командой

chmod a+x script.sh

2.Арифметические действия, циклы по кол-ву раз
#!/bin/bash

A="10"
B="5"
C=`expr $A + $B`
printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C"

# пример цикла по i
I=0
while [ $I -lt 15 ]
do
    printf "0x%02x " "$I"
    I=`expr $I + 1`
done
echo

3.Разного рода проверки
#!/bin/bash

# пример проверки существования файла
# создаем файл test1
touch test1
# проверяем существование файла test1
if [ -f test1 ] ; then
    echo "файл test1 существует"
fi
# проверяем несуществование файла test2
if ! [ -f test2 ] ; then
    echo "файл test2 не существует"
fi
# краткая справка по другим опциям команды [ ]
# -d filename   директория существует
# -f filename   файл существует
# -L filename   символьная ссылка существует
# -r, -w, -x    файл доступен для чтения, записи или выполнения
# -s filename   файл существует и имеет ненулевую длину
# f1 -nt f2     f1 новее чем f2
# f1 -ot f2     f1 старше чем f2

4.Работа с FTP в скрипте.
#!/bin/bash
ADDRESS=192.168.1.150
USER=root
PASSWORD=root
ftp -n -p ADDRESS <<EoF
user USER PASSWORD
cd /usr/bin
put my_cool_program
quit
EoF
exit 0

5.Работа с telnet в скрипте.
#!/bin/bash

(
  sleep 1
  echo "root"
  echo "cd /tmp"
  echo "ls"
  sleep 1
  echo "quit"
) | telnet 192.168.1.150
Примечание: в этом случае root логинится без пароля, если нужен пароль, то надо добавить после echo "root" еще одно эхо с паролем.

Прочее полезное.
#!/bin/bash

# пример цикла по множеству значений
for A in раз два три четыре пять
do
    echo "$A,"
done
echo "вышел заяц погулять"
echo


Интересные ссылки по теме:
http://www.linux.org.ru/books/bash-conspect.html