Ответы на экспресс-опрос
- Первая строка скрипта:
#!/bin/bash— shebang. Указывает операционной системе, какой интерпретатор использовать для выполнения файла. Без неё ОС не знает, как исполнить скрипт (попытается использовать оболочку по умолчанию или выдаст ошибку). - Поведение при ошибке: По умолчанию bash-скрипт продолжает выполнение после ошибочной команды. Если нужно остановиться при первой ошибке — добавьте в начало скрипта
set -e.
Решение задания 1 — Скрипт-информатор
# script_Andrew.sh
#!/bin/bash
echo "Hello! This script shows system information."
echo "Current directory:"
pwd
echo "All processes:"
ps -ef
echo "Current date and time:"
date
echo "Files containing 'error' in /var/log/:"
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
echo "Last 5 lines of /etc/os-release:"
tail -n 5 /etc/os-release
echo "Users info from /etc/passwd:"
awk -F ':' '{print "Username: " $1 ", Home: " $6}' /etc/passwd
echo "Script finished!"
Копирование в /tmp/: cp script_Andrew.sh /tmp/script_Andrew.sh
Решение задания 2 — Разбор скрипта создания файлов
Что делает скрипт строка за строкой:
DATE=`date '+%d-%m-%y'` # Записать текущую дату (напр. 14-06-26) в переменную DATE
for i in {1..5} # Цикл 5 раз
do
date +'%H-%M-%S' > File-$i.txt # Записать время в файл (напр. File-1.txt)
sleep 5 # Подождать 5 секунд (файлы будут с разным временем!)
done
mkdir -p $DATE # Создать директорию с именем = дата
cp File*.txt $DATE # Скопировать все File*.txt в эту директорию
for FILE in $DATE/* # Цикл по всем файлам в директории
do
cat $FILE # Вывести содержимое каждого файла
done
Почему разное время? Между итерациями цикла стоит sleep 5 — пауза 5 секунд, поэтому каждый следующий файл записывает другое время.
Вариант с while:
# create_files_while.sh
#!/bin/bash
DATE=$(date '+%d-%m-%y')
COUNT=1
while [ $COUNT -le 5 ]
do
date +'%H-%M-%S' > File-$COUNT.txt
sleep 5
((COUNT++))
done
mkdir -p $DATE
cp File*.txt $DATE
for FILE in $DATE/*
do
cat $FILE
done
Решение задания 3 — Проверка типа файла
# check_type.sh
#!/bin/bash
CURRENT_DIR=$(pwd)
echo "Checking files in: $CURRENT_DIR"
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. Usage: $0 <num_files>"
exit 1
fi
NUM_FILES=$1
mkdir -p generated_files
for ((i=1; i<=NUM_FILES; i++))
do
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