Скрипт 1 — testscript.sh
Создаёт иерархию директорий и файлов, упаковывает в архив, распаковывает в новый путь.
# testscript.sh
#!/bin/bash
#
ARHPATH=/tmp/Arh
EXTPATH=/opt/newfolder
DATE=`date '+%d-%m-%y'`
echo $DATE
for i in {1..5}
do
mkdir -p Dir$i
for j in {1..5}
do
date +'%H-%M-%S' > Dir$i/File-$j.txt
sleep 5
done
ls Dir$i
done
tar -czvf $ARHPATH/Arh-$DATE.tar.gz Dir* >> ArhList.txt
sleep 5
mkdir -p $EXTPATH
tar -xzf $ARHPATH/Arh-$DATE.tar.gz -C $EXTPATH
Пояснение строки с tar:
tar -czvf $ARHPATH/Arh-$DATE.tar.gz Dir* — создать сжатый архив из всех Dir1..Dir5>> ArhList.txt — вывод tar (-v) добавляется в файл ArhList.txt (verbose → файл)tar -xzf ... -C $EXTPATH — извлечь в указанную директорию, сохраняя структуру
Скрипт 2 — pinger.sh
Запрашивает адрес и количество попыток, пингует и возвращает среднее время ответа.
# pinger.sh
#!/bin/bash
read -p "Введите адрес для пинга: " address
read -p "Введите количество запросов для проверки: " count
ping_result=$(ping -c "$count" "$address")
avg_ping=$(echo "$ping_result" | awk -F'/' '/^rtt/ { print $5 }')
echo "Среднее время пинга до $address составляет: $avg_ping мс"
Почему
awk ищет строку начинающуюся с rtt, делит по
/^rtt/: вывод ping завершается строкойrtt min/avg/max/mdev = 1.234/5.678/9.012/0.123 msawk ищет строку начинающуюся с rtt, делит по
/, берёт 5-е поле (avg).
Скрипт 3 — md5check.sh
Вычисляет MD5-хэш каждого файла в указанной директории и сохраняет в текстовый файл.
# md5check.sh
#!/bin/bash
read -p "Enter path for control: " pathcheck
read -p "Enter path for result file: " pathresult
mkdir -p $pathresult
for var in $pathcheck/*
do
echo "file name - " $var
cd $pathresult
md5sum $pathcheck/$var >> $pathcheck-md5sum.txt
done
Скрипт 4 — scriptmaker.sh
Создаёт новый bash-скрипт с шаблонным заголовком в указанном месте.
# scriptmaker.sh
#!/bin/bash
read -p "Enter path for script: " SCRIPTPATH
read -p "Enter name for your script: " NAME
mkdir -p $SCRIPTPATH
ls $SCRIPTPATH/$NAME 2>/dev/null
if [ $? -eq 0 ]
then
echo "BAD NAME " $NAME "file exists"
else
echo "Script will be created using path " $SCRIPTPATH/$NAME
echo -e "#!/bin/bash\n#\n#Write the code here\n#\n" > $SCRIPTPATH/$NAME
chmod +x $SCRIPTPATH/$NAME
echo "DONE"
fi
Скрипт 5 — rename_ext.sh
Меняет расширения всех файлов в директории.
# rename_ext.sh
#!/bin/bash
read -p "Введите директорию (Enter = текущая): " directory
if [ -z "$directory" ]; then
directory="."
fi
if [ ! -d "$directory" ]; then
echo "Директория '$directory' не существует."
exit 1
fi
read -p "Введите текущее расширение файлов: " current_extension
read -p "Введите новое расширение файлов: " new_extension
cd "$directory" || exit
for file in *.$current_extension; do
if [ -e "$file" ]; then
filename=$(basename "$file" ".$current_extension")
mv "$file" "$filename.$new_extension"
echo "Изменено: $file -> $filename.$new_extension"
fi
done
echo "Готово."
Бесконечный цикл while true
Конструкция while true; do ...; done выполняется бесконечно. Для остановки нажмите Ctrl+C.
# infinite_loop_demo.sh
#!/bin/bash
# Бесконечный цикл — остановить Ctrl+C
counter=0
while true; do
counter=$((counter + 1))
echo "Итерация $counter — $(date +'%H:%M:%S')"
sleep 1
done
Управление бесконечным циклом:
Всегда добавляйте
Ctrl+C — прервать скрипт (отправляет SIGINT)Ctrl+Z — приостановить (отправить в фон), затем kill %1 для завершенияВсегда добавляйте
sleep N в бесконечный цикл — иначе скрипт нагрузит CPU на 100%.