Четверг, 28.03.2024, 12:21

Компьютерная помощь

Записки системного администратора

Меню сайта
Категории раздела
Компьютер [36]
Общекомпьютерные темы
Windows server [18]
Статьи по версиям windows для серверов.
Windows [30]
Статьи по версиям windows для рабочих станций.
Unix [65]
Статьи на тему unix-подобных систем. Linux, FreeBSD и т.п.
Видеомонтаж [10]
Статьи по нелинейному видеомонтажу
Программирование [9]
Заметки по программированию
Databases [10]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Вход на сайт

Поиск

Главная » Статьи » Unix

Написание скриптов на Bash в Linux

Скрипт должен храниться в файле с расширением .sh

Скрипт начинается со строки вида:

#!/bin/bash (в первой строке файла с расширением .sh знак # интерпретатор не распознает как комментарий)

echo "This site computerhelp" -команда выводит в консоль текст

This site computerhelp

Можно использовать любые стандартные команды Linux, например ls (вывод содержимого директории)

echo "This site computerhelp"

ls

Сохраним этот скрипт в файле myscript.sh и запустим его из командной строки. Для запуска скрипта мы должны дать файлу права на исполнение всем (а) (x-execute) командой chmod:

chmod a+x myscript.sh

После этого можем запускать наш скрипт командой:

./myscript.sh

Можно также запустить скрипт без добавления прав на исполнение файла командой:

bash myscript.sh

 

Создание переменных

mysite=''computerhelp"

mysite2="computerhelp.ucoz.ua"

Присваивание переменной значения выполнения команды Linux

myOS=`umane -a`    `- символ под кнопкой "Ecs"

Передача переменных посредством запуска скрипта в командной строке:

./myscript.sh  111 222 computer

где myscript.sh это переменная $0 (переменная $0 всегда равна названию файла),

соответственно переменная $1 равна "111", $2 равна "222", $3 равна "computer" и так далее.

И результатом выполнения скрипта myscript.sh John с содержимым     echo "Hello $1" будет

Hello John

Переменной host присвоим имя локального компьютера и сделаем пинг на него, наш скрипт будет выглядеть следующим образом:

host=`hostname` переменной host присваиваем имя локального компьютера (хоста) командой линукса hostname

ping -c 4 $host пингуем 4 раза наш хост

Наш итоговый скрипт:

#!/bin/bash

host=`hostname`

ping -c 4 $host

пропингует сам себя (127.0.0.1) четыре раза.

 

Ввод данных пользователя

Скрипт со следующим кодом запросит ввод данных от пользователя, сохранит их в переменную t1 а затем отобразит их после текста "You enter:"

#!/bin/bash
read -p "Enter text please: " t1
echo "You enter: $t1"

 

Использование условий и циклов в скриптах

Использование условий.

Наш скрипт с названием myscript.sh, содержащий следующий код

#!/bin/bash
if  [ "$1" == "Petya" ]; then
echo "Hello $1 !"
fi

(пробелы в условиях очень важны!)

При запуске скрипта с параметром Petya, то есть myscript.sh Petya скрипт проверит условие действительно ли есть параметр Petya и как итог выдаст нам сообщение:

Hello Petya !

Конечно можно делать более сложные условия, например:

#!/bin/bash
if  [ "$1" == "Petya" ]; then
echo "Hello $1 !"
elif [ "$1" == "computerhelp" ]; then
echo "Greating $1"
else echo "Privet $1"
fi

То есть если параметром скрипта передать "computerhelp", скрипт выдаст сообщение Greating computerhelp, соответственно во всех других условиях скрипт выдаст результат Privet и подставит текст из переданого скрипту параметра.

Оператор выбора CASE. Итак дополним наш скрипт следующим кодом:

case $2 in
        1) echo "Case1 is present";;
        [2-9]) echo "2 per 9 is present";;
        "comp") echo "Word "comp" is present";;
        *) echo "Any symbol is present"
esac

В итоге получим такой скрипт:

#!/bin/bash
if  [ "$1" == "Petya" ]; then
        echo "Hello $1 !"
elif [ "$1" == "computerhelp" ]; then
        echo "Greating $1"
else echo "Privet $1"
fi

case $2 in
        1) echo "Case1 is present";;
        [2-9]) echo "2 per 9 is present";;
        "comp") echo "Word "comp" is present";;
        *) echo "Any symbol is present"
esac

При выполнении этого скрипта с параметрами Petya 2, где $0 у нас всегда яляется именем файла и равно myscript.sh, $1 равно Petya и  $2 равно 2. Результатом команды

./myscript.sh Petya 2

будет

Hello Petya !
2 per 9 is present

* - здесь любой символ исключая символы из условия выше

Использование цикла WHILE

Создадим новый скрипт myscript2.sh

#!/bin/bash
counter=0
while [ $counter -lt 10]; do
    echo "Counter is: $counter"
    counter=$(($counter+1))
done

где -lt означает less then (меньше чем)

Результатом вывода этого скрипта будет:

Counter is: 0
Counter is: 1
Counter is: 2
Counter is: 3
Counter is: 4
Counter is: 5
Counter is: 6
Counter is: 7
Counter is: 8
Counter is: 9

 Циклы FOR

for myfile in `ls *.txt`; do
        cat $myfile
done

Этот скрипт выполняет команду cat для всех файлов с расширением txt, то есть отфильтровывает txt файлы командой ls *.txt и выводит содержимое файлов на экран командой cat.

for x in {1..10}; do
        echo "X = $x"
done

Цикл выше выводит последовательность цифр от 1 до 10:

X = 1
X = 2
X = 3
X = 4
X = 5
X = 6
X = 7
X = 8
X = 9
X = 10

Добавление инфы в файл:

cat <<EOF > index.html
<html>
<body>

<H2>Hello User !!!</H2>

</body>
</html>
EOF

Поиск инфы в файле и вывод результата поиска (можно сделать в виде скрипта script.sh):

result=`grep "Hello" index.html | wc -l`
echo $result
if [ "$result" = "1" ]
then
     echo "Test passed"
else
     echo "Test failed"
fi

Категория: Unix | Добавил: admin (19.08.2017)
Просмотров: 730 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: