Скрипты

Скрипты

Скрипт - текстовый файл, у которого есть права на исполнение.

Первая строка: #!/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 - случайное число

Written on October 3, 2016