Задача 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
Что делает этот скрипт:
- Записывает текущую дату (формат:
14-06-26) в переменнуюDATE - В цикле 5 раз: записывает текущее время в файл
File-N.txt, ждёт 5 секунд - Создаёт директорию с именем = дата
- Копирует все
File*.txtв эту директорию - Выводит содержимое каждого файла из директории
Вариант с 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 файлов