Приветствуется размещение своих статей на страницах нашего клуба

» » Примеры типовых операций в bash-скриптах
Информация к новости
  • Просмотров: 1 916
  • Автор: Altyn
  • Дата: 15 августа 2016 09:22
15 августа 2016 09:22

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


Автор: Altyn | Категория: Компьютеры | Просмотров: 1 916

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

 



Метки к статье: bash linux howto help


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

Архив новостей

Июль 2024 (1)
Март 2022 (1)
Декабрь 2021 (1)
Март 2021 (2)
Февраль 2021 (1)
Январь 2021 (2)
^