123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- #!/bin/bash
- # Coding: utf-8
- # Editor: www.geany.org
- # Created 2017-02-13
- #_sudo_apt_install_ xdotool pgrep nc play zenity transmission-remote lftp
- #_sudo_dpkg_i_
- hour="$(date '+%-H')" # час (00..23)
- hour_I="$(date +%-I)" # час (01..12)
- mins="$(date '+%-M')" # минуты (00..59)
- secs_unix="$(date +%s)" # число секунд, истёкших с 1970-01-01 00:00:00 UTC
- date="$(date +%y-%m-%d)" # 21-11-27
- date_ymd_HMS="$(date +%y-%m-%d_%H-%M-%S)" # 21-11-27_14-06-27
- date_ymd="$(date +%y%m%d)" # 231211
- date_utc="$(TZ='Europe/London' date '+%y-%m-%d')"
- day_of_year_utc="$(TZ='Europe/London' date '+%-j')" # день в году 1...365
- uptime_in_sec="$(cat /proc/uptime | cut -d. -f1)" # аптайм в секундах
- uptime=$((${uptime_in_sec} / 60)) # аптайм в минутах
- read uptime_in_day < "$HOME/LOG/uptime_counter.sh/tmp1/${date_utc}" # аптайм за день
- dir_general="$HOME/LOG/general"
- dir_scr="$HOME/.SCR"
- fun_analize_command () # логирование
- {
- local error=$?
- local stadia="$(date +%H-%M-%S_%6N) line.${BASH_LINENO[0]} com $@"
- if [ "$error" -eq "0" ] # если кода возврата 0
- then
- fun_echo_color 15 0 "$stadia"
- else
- stadia_err="$stadia script: $0 error: $error"
- zenity --error --title="fun_analize_command" --text="$stadia_err" --no-wrap
- ,speech_en.sh "Error. Script terminated"
- fun_echo_color 9 0 "$stadia_err"
- sleep 3
- echo "$stadia_err" >> "$HOME/Desktop/Error.log"
- exit 1001
- fi
- }
- fun_analize_condition () # анализ выполнения условий
- {
- local error=$?
- local stadia="$(date +%H-%M-%S_%6N) line.${BASH_LINENO[0]} con lib.sh $@"
- if [ "$error" -eq "0" ] # если кода возврата 0
- then
- fun_echo_color 10 0 "$stadia"
- else
- fun_echo_color 9 0 "$stadia. Condition not met. Script terminated."
- exit 1002
- fi
- }
- fun_log_dir_create () # $1 full path script, $2 how old days files must delete, $3 how much temp folders need to create
- {
- dir_script="$HOME/LOG/$(basename $1)"
- fun_create_directory $dir_script $dir_general
- if [ -n "$3" ]
- then
- for ((x=1; x<=$3;x++))
- do
- fun_create_directory "$dir_script/tmp$x" # create folders
- eval tmp$x="$dir_script/tmp$x" # white to variable path to temp folder tmpX
- find "$dir_script/tmp$x" -type f -mtime +$2 -delete # delete old files
- done
- fi
- }
- con_test_exist_file () # проверка наличия файла
- {
- for x in "$@"
- do
- if [ -f "$x" ];
- then
- fun_analize_condition "File $x exist"
- else
- fun_analize_condition "File $x not exist"
- fi
- done
- }
- con_test_not_exist_file () # проверка отсутствия файла
- {
- for x in "$@"
- do
- if [ ! -f "$x" ];
- then
- fun_analize_condition "File $x not exist"
- else
- fun_analize_condition "File $x exist"
- fi
- done
- }
- con_test_not_exist_process () # проверка отсутствия процесса
- {
- set -- "$@" 'RHVoice-test' 'play' 'tar' 'gpg' 'split' 'wget' 'rsync' 'lftp' 'filezilla' 'php' 'transmission-remote' 'sleep' 'diff' 'mv' 'ping'
- for process in "$@"
- do
- if [ ! "`pidof -x $process`" ]
- then
- fun_analize_condition "$process is not running"
- else
- fun_analize_condition "$process is already running"
- fi
- done
- }
- fun_press_button ()
- # 1 - coordinate x, 2 - coordinate y, 3 - click mode, 4 - sleep time after press
- # click mode: 1 = left, 2 = middle, 3 = right, 4 = wheel up, 5 = wheel down
- {
- xdotool mousemove $1 $2 # go to coordinates
- sleep 1
- if [ -n "$3" ]
- then
- xdotool click $3
- sleep $4
- fi
- }
- fun_press_key () # 1 - key, 2 - sleep time after press
- {
- xdotool key $1
- sleep $2
- }
- fun_pars () # парсинг строк, $file_edited должна существовать
- {
- # fun_echo_lib_stadia 10 0 "[1] Поиск строки с $1\r\v"
- #grep "$1" $file_edited
- #echo -e "\r\v"
- # fun_echo_lib_stadia 10 0 "[2] Разделитель перед началом текста = $2\r\v"
- # fun_echo_lib_stadia 10 0 "[3] Номер выбираемого столбца = $3\r\v"
- #grep "$1" $file_edited | cut -f$3 -d"$2"
- #echo -e "\r\v"
- # fun_echo_lib_stadia 10 0 "[4] Разделитель после конца текста = $4\r\v"
- # fun_echo_lib_stadia 10 0 "[5] Номер выбираемого столбца = $5\r\v"
- #grep "$1" $file_edited | cut -f$3 -d"$2" | cut -f$5 -d"$4"
- #echo -e "\r\v"
- # fun_echo_lib_stadia 10 0 "[6] Строка которую нужно отображать если выводится несколько строк = $6"
- #echo -e "\r\v"
- grep "$1" $file_edited | cut -f$3 -d"$2" | cut -f$5 -d"$4" | sed ''$6'!D'
- }
- fun_echo_variable ()
- {
- for x in $@
- do
- if [ -n "${!x}" ] # не печатаем пустые переменные
- then
- fun_echo_lib_stadia 10 0 "$x = ${!x}"
- fi
- done
- }
- fun_file_touch () # 1 - путь к создаваемому файлу
- {
- if [ ! -f "$1" ];
- then
- touch $1
- fun_analize_command "lib.sh Create $1"
- else
- fun_echo_lib_stadia 10 0 "$1 exist"
- fi
- }
- fun_for_continue_enter_password ()
- {
- password="$((1 + RANDOM % 1000))"
- until [ "$enter_password" == "$password" ]
- do
- ,speech_en.sh "For continue press $password"
- read enter_password
- done
- enter_password=""
- }
- con_test_ip_port_open () # 1 - ip адрес (127.0.0.xxx всегда доступен) , 2 - порт (опционально)
- {
- if ping -c 1 192.168.100.1 &> /dev/null # доступность роутера
- then
- fun_analize_condition "Router is online"
- if ping -c 1 $1 &> /dev/null # доступность ip адреса
- then
- fun_analize_condition "ip adress $1 online"
- else
- fun_analize_condition "ip adress $1 offline"
- fi
- if [ $# == "2" ] # если 2 аргумента
- then
- nc -z $1 $2
- if [ "$?" -eq 0 ]
- then
- fun_analize_condition "ip port $2 open"
- else
- fun_analize_condition "ip port $2 closed"
- fi
- fi
- else
- fun_analize_condition "Router offline"
- fi
- }
- fun_run_command ()
- {
- error_file="$HOME/Desktop/error.log"
- "$@"
- local error=$?
- if [ "$error" -eq "0" ] # проверка на ошибки
- then
- fun_echo_lib_stadia 10 0 "Command: $0 $@."
- else
- echo "$(date +%H-%M-%S_%6N) fun_run_command Command: $0 $@. Error № $error." >> "$error_file"
- fun_echo_lib_stadia 9 0 "Command: $0 $@. Error № $error."
- cat "$error_file"
- exit 1004
- fi
- }
- fun_ask_and_run_command ()
- {
- while true
- do
- echo ""
- fun_echo_lib_stadia 10 0 "fun_ask_and_run_command"
- echo "[1] Run command: $@ ?"
- echo "[0] Continue without run command"
- read choice
- case $choice in
- [1] )
- fun_run_command "$@"
- break
- ;;
- [0] )
- echo "Command skipped"
- break
- ;;
- * ) fun_echo_lib_stadia 9 0 "Error. Press 1 or 0";;
- esac
- done
- }
- fun_create_directory () # пути до создаваемых папок через пробел
- {
- for dir in "$@"
- do
- if [ ! -d "$dir" ]
- then
- mkdir -p "$dir"
- fun_analize_command "lib.sh Create folder $dir"
- else
- fun_echo_lib_stadia 10 0 "Folder $dir exist"
- fi
- done
- }
- fun_echo_stadia () # 1 - цвет текста, 2 - цвет фона, остальные текст. Для стадий из скриптов без анализа кода возврата.
- {
- # Цветной текст 19:07:41.514784 line.2 Копирование file
- fun_echo_color $1 $2 "$(date +%H-%M-%S_%6N) line.${BASH_LINENO[0]} ${@:3}"
- }
- fun_echo_lib_stadia () # 1 - цвет текста, 2 - цвет фона, остальные текст. Для обычных сообщений из lib.sh
- {
- # Цветной текст 22:55:24.167452 line.260 lib.sh com Удаление /tmp/lock
- fun_echo_color $1 $2 "$(date +%H-%M-%S_%6N) line.${BASH_LINENO[0]} lib.sh ${@:3}"
- }
- fun_echo_color () # 1 - цвет текста, 2 - цвет фона, остальные текст. Цвета смотрите в /opt/system_configurator.sh
- {
- tput setaf $1
- tput setab $2
- echo -n "${@:3}"
- echo $(tput sgr0)
- }
- fun_create_random_string ()
- {
- unset random_string
- random_string="$(date +%s | sha256sum | base64 | head -c 12)"
- }
- fun_convert_to_mins () # конвертация минут в формат $час $минута и наоборот
- {
- if [ $# == "1" ] # если агрумент один
- then
- echo "$(($1 / 60)) $(($1 % 60))"
- else
- echo "$(( ($1 * 60) + $2 ))"
- fi
- }
- fun_statistic_uptime () # среднеарифметический аптайм за $1 дней
- {
- sum="$(cat $HOME/LOG/uptime_counter.sh/tmp1/* | tail -n$1 | awk '{s += $1} END {print s}' )"
- middle_sum="$(echo "scale=0; $sum / $1 " | bc)"
- stat_in_hours="$(($middle_sum / 60 ))"
- stat_in_hours_ost="$(($middle_sum % 60 ))"
- echo "$stat_in_hours:$stat_in_hours_ost"
- }
- fun_lftp_tvbox () # аргументы в '' приставку
- {
- lftp -e "open tvbox && set net:timeout 10 && $@ && bye"
- }
- fun_lftp_tvbox_torrent_list () # выдает список файлов в папке torrent
- {
- fun_lftp_tvbox 'find -l /storage/emulated/0/torrent' | grep -v '0/torrent/$' | grep -v '0/torrent/dl/$' | grep -v '0/torrent/m1/$' | grep -v '0/torrent/m2/$' | cut -b35- | sed s/^\ *// | sort
- }
- fun_lftp_tvbox_torrent_size ()
- {
- size="$(fun_lftp_tvbox 'du -s /storage/emulated/0/torrent' | cut -f1)"
- size_h=$(echo "scale=1; x=$size/1000000; if(x<1) print 0; x" | bc)
- fun_echo_stadia 11 0 "Torrent folder size is $size Кб or $size_h Гб"
- }
- fun_lftp_smart () # аргументы в '' телефон
- {
- lftp -e "open smart && $@ && bye"
- }
- fun_transmission () # 1 аргумент pc или tvbox, остальные для transmission
- {
- if [ "$1" == "pc" ]
- then
- read auth < "$HOME/.ssh/trans_pc_auth"
- transmission-remote 127.0.0.1:9091 "$auth" "${@:2}"
- fi
- if [ "$1" == "tvbox" ]
- then
- read auth < "$HOME/.ssh/trans_tvbox_auth"
- transmission-remote 192.168.100.101:9091 "$auth" "${@:2}"
- fi
- }
- con_transmission_not_download () # 1 аргумент pc или tvbox
- {
- download_speed="$(fun_transmission "$1" -l | tail -n1 | awk '{print $NF}')"
- if [ "$download_speed" == "0.0" ]
- then
- fun_analize_condition "$1 download speed 0.0"
- else
- fun_analize_condition "$1 download speed not equal to 0.0"
- fi
- }
- fun_pup_parser ()
- # 1 - файл для парсинга, 2 - паттерн для pup, 3 - номер выводимой строки
- # Пример: fun_pup_parser ~/Downloads/download.html div[class="day__date"] 1
- {
- cat "$1" | "$HOME/.pup/pup" "$2" | grep -v "<" | awk '{$1=$1};1' | sed ''$3'!D'
- }
- fun_pup_parser_all ()
- # 1 - файл для парсинга, 2 - паттерн для pup
- # тестовая функция для показа всех строк
- {
- cat "$1" | "$HOME/.pup/pup" "$2" | grep -v "<" | awk '{$1=$1};1'
- }
- fun_list_files_in_flash () # выдает список файлов на флешке
- {
- find /media/a/flash59gb/ -maxdepth 2 -type f -printf "%T@ %Tc %p\n" | sort -n
- }
- fun_color_comb () # Demonstrate color combinations
- {
- for fg_color in {0..15}; do
- set_foreground=$(tput setaf $fg_color)
- for bg_color in {0..15}; do
- set_background=$(tput setab $bg_color)
- echo -n $set_background$set_foreground
- printf 'f%sb%s' $fg_color $bg_color
- done
- echo $(tput sgr0)
- done
- }
- fun_file_resize () # 1 - сократить до размера в Кб, 2 - путь до файла
- {
- file_size="$(stat "$2" -c %s)"
- while [ "$file_size" -gt "$1" ]
- do
- sed -i 1d "$2" # удаляем первую строку
- file_size="$(stat "$2" -c %s)"
- done
- }
- fun_mem_val () # return memory values
- {
- MemAvailable="$(cat /proc/meminfo | grep "MemAvailable" | awk '{print $2}')"
- MemTotal="$(cat /proc/meminfo | grep "MemTotal" | awk '{print $2}')"
- MemAvailableP="$(echo "scale=0; ${MemAvailable}/($MemTotal/100)" | bc)"
- echo "$MemAvailable / ($MemTotal / 100 ) = $MemAvailableP% MemAvailable"
- }
|