💻 Примеры — 4 скрипта занятия

К оглавлению урока

⚡ Минимальный рабочий пример

# script_NAME.sh
#!/bin/bash
echo "Hello! Current directory:"
pwd
echo "Current date:"
date
echo "Script finished!"

Запуск: chmod +x script_NAME.sh && ./script_NAME.sh

Задача 1 — Скрипт-информатор системы

Задание: написать script_ВАШЕИМЯ.sh, который выводит системную информацию. Скопировать в /tmp/.

# script_Andrew.sh
#!/bin/bash
# Выводим приветствие
echo "Hello! This script shows current directory and process list."
# Выводим текущий каталог
echo "Current directory:"
pwd
# Выводим список всех процессов
echo "All processes:"
ps -ef
# Выводим текущую дату и время
echo "Current date and time:"
date
# Проверяем файлы с ключевым словом 'error'
echo "Files containing 'error':"
grep -rn "error" /var/log/
# Выводим содержимое файла с информацией о системе
echo "System info (/etc/os-release):"
cat /etc/os-release
# Подсчитываем количество строк в файле
echo "Line count in /etc/os-release:"
wc -l /etc/os-release
# Выводим последние 5 строк
echo "Last 5 lines of /etc/os-release:"
tail -n 5 /etc/os-release
# Выводим информацию о пользователях через awk
echo "Users info:"
awk -F ':' '{print "Username: " $1 ", Home: " $6}' /etc/passwd
echo "Script finished successfully!"

Копирование в /tmp/:

cp script_Andrew.sh /tmp/script_Andrew.sh

Задача 2 — Скрипт создания файлов с датой

Задание: разобрать скрипт создания директорий и копирования файлов.

Оригинальный скрипт (из занятия)

# create_files.sh
#!/bin/bash
#
DATE=`date '+%d-%m-%y'`
#echo $DATE
for i in {1..5}
do
    date +'%H-%M-%S' > File-$i.txt
    sleep 5
done
mkdir -p $DATE
cp File*.txt $DATE
#cd $DATE
for FILE in $DATE/*
do
    cat $FILE
done

Что делает этот скрипт:

  1. Записывает текущую дату (формат: 14-06-26) в переменную DATE
  2. В цикле 5 раз: записывает текущее время в файл File-N.txt, ждёт 5 секунд
  3. Создаёт директорию с именем = дата
  4. Копирует все File*.txt в эту директорию
  5. Выводит содержимое каждого файла из директории

Вариант с for (упрощённый)

# create_files_for.sh
#!/bin/bash
#
for i in {1..5}
do
    echo "Iteration $i"
    touch "file_$i.txt"
    sleep 2
done
echo "All files created:"
ls -l file_*.txt

Вариант с while

# create_files_while.sh
#!/bin/bash
#
COUNT=1
while [ $COUNT -le 5 ]
do
    echo "Iteration $COUNT"
    touch "file_$COUNT.txt"
    sleep 2
    ((COUNT++))
done
echo "All files created:"
ls -l file_*.txt

Задача 3 — Проверка: файл или директория

Задание: написать скрипт, который для каждого файла в директории выводит, является ли он директорией или файлом.

# check_type.sh
#!/bin/bash
# Определяем текущий каталог
CURRENT_DIR=$(pwd)
# Выводим приветствие
echo "This script shows info about each file in current directory."
# Переходим в текущий каталог
cd $CURRENT_DIR
# Запускаем цикл for для итерации по списку файлов
for FILE in *
do
    # Проверяем, является ли файл директорией
    if [ -d "$FILE" ]; then
        echo "$FILE - directory"
    else
        echo "$FILE - file"
    fi
done
echo "Script finished!"

Задача 4 — Генерация файлов со случайными именами

Задание: написать скрипт, который принимает количество файлов как аргумент и генерирует файлы со случайными именами и содержимым.

# generate_files.sh
#!/bin/bash
# Проверяем, передано ли количество файлов как аргумент
if [ $# -eq 0 ]; then
    echo "Error: no arguments provided. Usage: $0 <num_files>"
    exit 1
fi
# Переменная с количеством файлов для генерации
NUM_FILES=$1
# Создаём директорию для файлов, если она не существует
mkdir -p generated_files
# Генерируем файлы
for ((i=1; i<=NUM_FILES; i++))
do
    # Генерируем случайное имя файла (дата + $RANDOM)
    FILE_NAME="generated_files/file_$i-$(date '+%Y-%m-%d').$RANDOM"
    # Генерируем случайный текст для файла
    RANDOM_TEXT=$(head /dev/urandom | head -c 100)
    # Создаём файл с случайным именем и содержимым
    echo "$RANDOM_TEXT" > "$FILE_NAME"
done
echo "Files created successfully!"

Запуск с аргументом:

chmod +x generate_files.sh
./generate_files.sh 5    # создаст 5 файлов