Скрипты
Скрипты
Скрипт - текстовый файл, у которого есть права на исполнение.
Первая строка: #!/bin/bash - указание, каким интерпретатором выполнять
#!/usr/bin/python
Создаём будущий скрипт и назначаем ему права
touch file.sh
chmod a+x file.sh
Простейший пример:
#!/bin/bash
ls -a
cat /etc/passwd
./file.sh - запустить (обязательно с полным или относительным путём)
Переменные
### Встроенные
$0..$9 - аргументы командной строки
$0 - имя самого скрипта
Если количества не хватает, то можно использовать
shift n:
$n становится $1,
$(n+1) становится $2 etc
$* - полная командная строка
$# - количество аргументов командной строки
$? - результат выполнения последней команды (аналог %errorlevel% в Windows)
Если не 0, то считается ошибочным.
Корректно завершившаяся программа возвращает 0.
Переменные пользователя
abc=1
ПРИЧЁМ БЕЗ ПРОБЕЛОВ!!!!!1111
Объявление переменных всегда без знака $, обращение к ним всегда с $
a=1
echo $a $$
Получение значений от пользователя:
read a
echo $a
Арифметические операции
a=1
b=2
echo $((a+b))
echo $[a+b]
c=$[a+b]
Условия
if <команда>
then
echo True
else
echo False
fi
if смотрит на код возврата
если 0, то then, если нет, то else
test - команда, проверяющая истинность логических выражений
if test 1 == 1 then … fi
[ - команда, почти аналогичная test, но более красиво выглядящая
if [ 1 == 2 ]
then
fi
ДО И ПОСЛЕ [ НУЖНЫ ПРОБЕЛЫ
Логические операторы для строк
== - равенство
!= - неравенство
< - сравнение ASCII-кодов
> - –/–/–/–/–/–/–/
if [ “$a” == “hello” ] …
-z - проверка, что строка пустая -n - проверка, что строка не пустая
if [ -z “$a” ] - true если $a - пустая строка
Логические операторы для чисел
-eq - равно -ne - не равно -lt - < -gt - > -le -ge - <= и >=
if [ $a -eq $b ] then echo a равно b fi
Операторы для файлов
-e - файл существует -f - обычный файл -d - директория -r / -w / -x - проверка прав на чтение / запись / выполнение
if [ -f /etc/passwd ] - проверка, что /etc/passwd существует и является файлом
Циклы
### while
while <команда> - синтаксис как у if
Ждем непустую строку от пользователя:
while [ -z "$a" ]
do
read a
done
for
for обходит списки
for i in a b c
do
echo $i
done
for i in `seq 1 100`
do
done
команда - выполняет команду и подставляет в это место
её текстовый вывод.
for (( i=0;i<10;i++ ))
do
echo $i
done
Логические операции
&& - логическое И || - логическое ИЛИ
ls && echo 123
если код возврата ls - 0 (успех), то выполняется echo иначе - не выполняется
ls || echo 123 || cat /etc/passwd - выполняет команды, пока одна из них не завершится успешно
Логической И двух сравнений:
if [ 1 == 1] && [ 2 == 3 ]
then
..
fi
Одной квадратной скобкой (быстрее):
if [ 1 == 1 -a 2 == 3 ]
then
...
fi
-a - И
-o - ИЛИ
Практика.
Игра угадайка.
Компьютер загадывает число от 0 до 100,
пользователь угадывает
> Guess?
< 10
> Моё больше
< 100
> Моё меньше
< 70
> Угадал!
$RANDOM - случайное число
