Uchyoba

Home

❯

Учёба

❯

Практика

❯

1C

❯

Информатика

❯

Скрипты

Скрипты

27 февр. 2026 г.время чтения ~4 мин.

1. Аргументы скрипта

Специальные переменные

ПеременнаяОписаниеПример
$0Имя самого скрипта./script.sh
$1, $2…Первый, второй аргументstart
$#Количество переданных аргументов2
$@Все аргументы одной строкой (список)"arg1" "arg2"
$?Код возврата последней команды (0 - успех)0
$$PID текущего процесса1234

Шаблон проверки аргументов

if [ -z "$1" ]; then
    echo "Usage: $0 <argument>"
    exit 1
fi

2. Отправка в Telegram

Параметры

  • TOKEN: Токен от BotFather.
  • CHAT_ID: ID чата (получить через getUpdates).
  • TEXT: Текст сообщения.

Команда (curl)

curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" -d chat_id="<CHAT_ID>" -d text="<TEXT>"

Функция для вставки в скрипт

send_tg() {
    curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage" \
    -d chat_id="CHAT_ID" \
    -d text="$1" > /dev/null
}

3. Условия (if / else)

Синтаксис

if [ условие ]; then
    # команды
elif [ другое_условие ]; then
    # команды
else
    # команды
fi

Сравнение чисел

ФлагЗначениеМатем. аналог
-eqРавно==
-neНе равно!=
-gtБольше>
-ltМеньше<
-geБольше или равно>=
-leМеньше или равно<=

Сравнение строк

ФлагОписание
= Строки совпадают
!=Строки не совпадают
-zСтрока пустая (Zero length)
-nСтрока НЕ пустая (Non-zero)

Проверка файлов

ФлагОписание
-fФайл существует и это обычный файл
-dДиректория существует
-eОбъект существует (файл или папка)
-sФайл существует и не пустой
-rДоступен для чтения
-xДоступен для исполнения

4. Циклы

For (Перебор элементов/файлов)

for file in /var/log/*.log; do
    echo "$file"
done

For (C-style, счетчик)

for (( i=1; i<=10; i++ )); do
    echo "$i"
done

While (Чтение файла построчно)

cat file.txt | while read line; do
    echo "$line"
done

5. Обработка текста (Grep, Awk, Cut)

GREP (Поиск)

grep "text" file      # Строки с "text"
grep -v "text" file   # Строки БЕЗ "text"
grep -r "text" dir/   # Поиск в папке рекурсивно
grep -E "a|b" file    # ИЛИ (расширенный режим)

AWK (Извлечение столбцов)

# $1 - первый столбец, $NF - последний столбец
awk '{print $1}' file.txt
 
# Свой разделитель (-F)
awk -F ":" '{print $1}' /etc/passwd

WC (Подсчет)

wc -l file.txt        # Количество строк
wc -w file.txt        # Количество слов

SED (Замена)

sed 's/old/new/g' file.txt  # Заменить old на new везде

6. Массивы (Task: Азбука Морзе)

Ассоциативные массивы (Словарь)

declare -A map
map["A"]=".-"
map["B"]="-..."
 
key="A"
echo "${map[$key]}"  # Выведет .-

Обычные массивы

arr=("Debian" "Arch" "Ubuntu")
 
echo "${arr[0]}"   # Первый элемент
echo "${arr[@]}"   # Все элементы
echo "${#arr[@]}"  # Длина массива

7. Строки (Slicing)

Операции

СинтаксисДействие
${#str}Длина строки
${str:0:1}Первый символ (срез с 0 длиной 1)
${str:1}Все символы, начиная со 2-го
${str^^}Перевод в верхний регистр (UPPERCASE)
${str,,}Перевод в нижний регистр (lowercase)

Посимвольный перебор (для Морзе)

STR="HELLO"
LEN=${#STR}
 
for (( i=0; i<LEN; i++ )); do
    CHAR="${STR:$i:1}"
    echo "$CHAR"
done

8. Математика (Task: Калькулятор)

Целые числа

A=10; B=5
SUM=$(( A + B ))
DIV=$(( A / B ))

Дробные числа (bc)

# scale=2 (кол-во знаков после запятой)
RES=$(echo "scale=2; 10.5 / 2" | bc)

Case (выбор операции)

case $OP in
    +) RES=$((A + B)) ;;
    -) RES=$((A - B)) ;;
    *) echo "Error" ;;
esac

9. Web (Curl) и Parsing (XML/HTML)

Curl — основные флаги

ФлагОписание
-sSilent. Не показывать прогресс-бар и мусор в консоли.
-LLocation. Следовать за перенаправлениями (если сайт кидает с http на https).
-o <file>Output. Записать вывод в указанный файл.
-OСохранить файл под его оригинальным именем.
-IHead. Скачать только заголовки (без тела HTML).
-w "%{http_code}"Write. Вывести конкретную инфу (обычно код ответа).

Сценарии использования

# 1. Получить HTML-код страницы в переменную (для парсинга)
CONTENT=$(curl -sL "https://example.com")
 
# 2. Скачать файл и сохранить как data.xml
curl -sL -o data.xml "https://cbr.ru/scripts/XML_daily.asp"
 
# 3. Получить ТОЛЬКО код ответа (200, 404, 503) — для мониторинга
# -o /dev/null выбрасывает html-код, остается только то, что в -w
CODE=$(curl -s -o /dev/null -w "%{http_code}" "https://example.com")

Парсинг XML (Задача “Валютчик”) Вариант 1: Правильный (через xmllint)

# Извлечь курс (Value) для валюты с ID R01235 (USD)
# "string(...)" убирает теги <Value>...</Value>
curl -s "URL" | xmllint --xpath "string(//Valute[@ID='R01235']/Value)" -

Вариант 2: “Костыльный” (через grep/sed)

# -A 1 : взять строку совпадения + 1 строку ПОСЛЕ неё
curl -s "URL" | grep -A 1 "USD" | grep "Value" | sed 's/<[^>]*>//g'

10. Cron и Aliases

Cron (Расписание) Команда: crontab -e

ФорматЗначение
* * * * *Мин Час День Мес День_недели
*/5 * * * *Каждые 5 минут
0 9 * * *Каждый день в 09:00
@rebootПри запуске системы

Пример строки Cron

0 9 * * * /bin/bash /home/user/script.sh

Alias (Сокращения) Файл: ~/.bashrc

alias name='command'

Вид графа

Создано с помощью Quartz v4.5.2 © 2026

  • GitHub
  • Discord Community