#!/usr/bin/env bash
my_cmd_1() {
echo "1st command output. Args: $*"
}
my_cmd_2() {
echo "2nd command output. Args: $*"
}
echo 'Available commands: my_cmd_1, my_cmd_2, exit'
while true; do
read -erp '>>> '
$REPLY
if [[ "$REPLY" == "exit" ]]; then
break
fi
done
~ $ ./cmd.sh
Available commands: my_cmd_1, my_cmd_2, exit
>>> my_cmd_1 --option argument
1st command output. Args: --option argument
>>> exit
read --help
man readline
#!/usr/bin/env bash
addr=google.com
lock=/tmp/connect.failed
while true; do
if ping -c 1 -W 5 "$addr" &> /dev/null; then
if [ -f "$lock" ]; then
notify-send 'Проверка подключения' 'Есть коннект'
rm "$lock"
fi
else
if [ ! -f "$lock" ]; then
notify-send 'Проверка подключения' 'Связи нет'
touch "$lock"
fi
fi
sleep 60
done
#!/bin/sh
dir=/mnt/d/Downloads
find "$dir" -type f -regextype egrep -regex '.*\.(mkv|m4v|mp4|ts|avi)' -print0 | sort -zr | xargs -0 -I {} echo {}
find "$dir" -type f -regextype egrep -regex '.*\.(flac|m4a|ape)' -print0 | sort -zr | xargs -0 -I {} echo {}
find "$dir" -type f -regextype egrep -regex '.*\.cue' -print0 | sort -zr | xargs -0 -I {} echo {}
Вместо echo вставьте свою команду. Вместо парных фигурных скобок подставляется имя файла. Если над файлами надо делать сложные действия, то можно сделать по аналогии:#!/bin/sh
dir=/mnt/d/Downloads
videos="$(find "$dir" -type f -regextype egrep -regex '.*\.(mkv|m4v|mp4|ts|avi)' | sort -r)"
if [ -n "$videos" ]; then
x=$IFS; IFS=$'\n';
for video in "$videos"; do
# делаем что-то
echo "$video"
done
IFS="$x"
fi
G="\e[32m" # green
N="\e[0m" # no color
echo -e "${G}Инициализация системы ... [OK]${N}"
show_spinner() {
chars="/-\|*"
while pgrep "$1" > /dev/null; do
for (( i=0; i<${#chars}; i++ )); do
sleep 0.2
echo -en "${chars:$i:1} ${G}Обработка...${N}" "\r"
done
done
}
# show_spinner <тут имя процесса, за которым надо следить>
# Например, за find:
show_spinner find
tar -czvf archive.tar.gz -C /path/to/dir/ dir/