Полезные скрипты (или ПО для начинающих...)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Полезные скрипты

Сообщение yamah »

Предлагаю в эту тему скидывать скрипты, облегчающие повседневнюю жизнь.

Содержание (ссылки на скрипты)
Скрипты для гугления можно взять тут.
Скрипт для переключения между двумя звуковыми картами можно взять здесь.
Скрипт для автоматической перекодировки текстовых файлов лежит тут.
Переименование русских имен файлов в транслит
Скрипт-напоминатель.
Скрипт массового конвертирования видео в MKV здесь
Скрипт для монтирования дисков с ntfs сразу с читабельной кодировкой можно поискать тут. Здесь же описание что нужно сделать для его работы.
Скрипт для создания плейлиста для консольного плейера mpg123
Скрипт для проверки наличия почты по imap
Скрипт автоматической установки зависимостей, прописанных в файле *.dsc исходников, для сборки *.deb пакетов - Зависимость Debian :)
Cоздание локального репозитория - Зависимость Debian :)
Замена всех пробелов в именах файлов подчёркиваниями, начиная от текущего каталога
Бэкапим.
Поиск самого глубоко-вложенного каталога
Скрипт сравнения md5
Cкрипт для преобразования латеховского кода в png-изображение
Cкрипт для изучения английских слов
Cкрипт для восстановления уничтоженной базы данных rpm:
autocrop для mencoder
Пересборка всех пакетов собранных с флагами отличными от таковых в make.conf - gentoo only
Поиск в файле строк, не встречающихся в другом файле, или наоборот, строк, которые присутствуют в разных местах второго файла - требует компиляции, ибо исходный код.
Несколько скриптов сразу - Простенькая форма для поиска по mpd-коллекции и запуска проигрывания с использованием xdialog // Скрипт, вычисляющий swatch-time // "Nautilus-scripts" для архивирования-разархивирования
Функция для скачивания с депозита
Скрипт для рекурсивного преобразования alac -> flac
Скрипт поиска дублей файлов - использует SQLight
Конвертирование русских букв из кодировки Latin-1 в UTF-8
Обновление 2ГИС из zip-архивов (для Linux которые)

А вот пример скрипта для упрощения монтирования образов компакт-дисков.

Код: Выделить всё

#!/bin/sh

mount -t iso9660 -o loop $1 /media/vcd-rom

Можно, конечно, посадить это на sudo, но я не стал.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10
Контактная информация:

Re: Полезные скрипты

Сообщение BlackStar »

Скрипт - напоминатель. Зависимости:
1. Установленная библиотека libnotify
2. Запущенный демон atd

remind.sh

Код: Выделить всё

#!/bin/sh
# $Id: remind.sh, v 1.0 2007/10/04 13:00:13 $

if [ $# -lt 2 ]; then
    echo Usage: $(basename $0) time message
    exit 1
fi

JOB="/usr/bin/notify-send -u normal -i gnome-note 'Remind at $1' '$2'"

echo $JOB | at $1


Пример:
# remind.sh 12:08 "Сделать скриншот"

Результат:
Вложения
notify.png
LightLang Team
Спасибо сказали:
Аватара пользователя
Палач
Сообщения: 624
Статус: ASUS Eee 1000HE
ОС: Gentoo ~x86 / Simply 5.0

Re: Полезные скрипты

Сообщение Палач »

Скрипт для получения прямых URL необходимых к докачке сорцов при обновлении мира. Удобно когда машина не имеет доступа к сети. Не мое, подсказали.
get_list_upd.sh

root@NoNaMe

#!/bin/sh
emerge -pf world 2>&1 | awk '/tp:/ { print $1 }' | while read f; do [ ! -s /usr/portage/distfiles/${f##*/} ] && echo $f; done

Пример:

root@NoNaMe

NoNaMe palach # get_list_upd.sh
ftp://ftp.ussg.iu.edu/pub/linux/gentoo/di...1.2.26.tar.lzma
ftp://ftp.ussg.iu.edu/pub/linux/gentoo/di...1.2.26.tar.lzma
NoNaMe palach #
При желании можно направить в файл:

root@NoNaMe

NoNaMe palach # get_list_upd.sh > /media/MYFLASH/world.txt

Как можно заметить, можно использовать не только для обновления мира, изменив начало с "emerge -pfDN world" на "emerge -puDN какй-либо_пакет"
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Полезные скрипты

Сообщение yamah »

Скрипт для монтирования образов дисков с графическим и текстовым интерфейсом лежит сдесь.
Зависимость следует также уточнить в этой теме.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian
Контактная информация:

Re: Полезные скрипты

Сообщение rm_ »

BlackStar писал(а):
23.05.2008 11:53
Пример:
# remind.sh 12:08 "Сделать скриншот"


Скрипт для быстрого создания скриншотов. :)
Требует scrot, zenity, pngcrush.
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: Полезные скрипты

Сообщение TechnoMag »

yamah писал(а):
27.08.2008 08:06
Скрипт для монтирования образов дисков с графическим и текстовым интерфейсом лежит сдесь.
Зависимость следует также уточнить в этой теме.


Зависимости:
dialog, Xdialog.
Давно уже входят в состав многих дистрибьютивов.
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux
Контактная информация:

Re: Полезные скрипты

Сообщение eddy »

Переименование русских имен файлов в транслит:

Код: Выделить всё

#!/bin/sh
# this script has been written by Eddy
#
#               rename_translit --- переводит русские имена файлов в транслит
#
# Создан 22-го Май 2006 года в  9:24
#
for Name in `ls -1`
do
    Newname=`echo "$Name"|sed -e \
    "y/йукенгзхъфывапролдэсмитьбЙУКЕНГЗХЪФЫВАПРОЛДЭСМИТЬБ/jukengzh'fyvaproldesmit'bJUKENGZH'FYVAPROLDESMIT'B/"\
    -e "s/ц/tz/g"       \
    -e "s/ш/sh/g"       \
    -e "s/щ/sch/g"      \
    -e "s/ж/zh/g"       \
    -e "s/ч/ch/g"       \
    -e "s/ю/yu/g"       \
    -e "s/я/ya/g"       \
    -e "s/Ц/TZ/g"       \
    -e "s/Ш/SH/g"       \
    -e "s/Щ/SCH/g"      \
    -e "s/Ж/ZH/g"       \
    -e "s/Ч/CH/g"       \
    -e "s/Ю/YU/g"       \
    -e "s/Я/YA/g"`
    if [ "$Name" != "$Newname" ]; then
        mv "$Name" "$Newname"
        echo -e "$Name   ->    $Newname\r\c"
    fi
    if [ -d "$Newname" ]; then
        cd "$Newname"
        echo -e "\n\nDiving into $Newname"
        rename_translit
        cd ../
    fi
done
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
TechnoMag
Сообщения: 298
ОС: Debian 8.0 Jessie

Re: Полезные скрипты

Сообщение TechnoMag »

Зависимости: dialog

Код: Выделить всё

#!/bin/sh

# скрипт для создания плейлиста для консольного плейера mpg123
# Created by TechnoMag

dialog --msgbox "Выберите папку в которой находятся mp3-файлы." 10 40
directory=$(dialog --stdout --title "Выбор папки с музыкой" --dselect "$HOME/" 10 60)
dialog --msgbox "Введите путь и имя файла-плейлиста" 10 40
playlist=$(dialog --stdout --title "Выбор имени файла для плейлиста" --fselect "$HOME/" 10 80)
dialog --yesno "Воспроизвести созданный плейлист?" 10 40
find $directory/*.mp3 -print > $playlist
if [ $? = 0 ];
then
    if [ -e $playlist ];
    then
        mpg123 --list $playlist &
    else
        dialog --msgbox "Вы можете воспроизвести плейлист позже, \n набрав команду: mpg123 --list путь_к_плейлисту" 10 40
    fi
else
    dialog --msgbox "Файл плейлиста не создан!\nВнимательно вводите пути и имена файлов!" 10 40
fi
- Домашний Linux -
Памятки для пользователя
Спасибо сказали:
Аватара пользователя
NekoExMachina
Сообщения: 485
ОС: Кошерная.

Re: Полезные скрипты

Сообщение NekoExMachina »

Скрипт для автоматической перекодировки текстовых файлов лежит тут.

а я пользуюсь enconv из пакета enca.
На форуме больше не появляюсь.
Высокопарность и надменность довела.
OpenBSD-current+scrotwm*1 (acer aspire one 531h)
FreeBSD 8.1+kde3*1 (desktop)
FreeBSD 8.1+scrotwm*1 (hp530)
FreeBSD 9.0+dwm*1 (old toshiba satellite)

Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

Скрипт для проверки наличия почты по imap. Делал для gmail, но можно для чего угодно. Можно и для pop, но надо будет чуть-чуть допилить. Нужен fetchmail. В переменную IMAPDIRS вписать свои каталоги через запятую.

Код:

#!/bin/sh # каталоги imap, в которых проверять (через запятую): IMAPDIRS="INBOX,dir1,dir2" TOTALMSG=0 SEENMSG=0 # вывод fetchmail: CHECKMAIL=`fetchmail -c -r $IMAPDIRS` # всего сообщений: _TOTALMSG=`echo $CHECKMAIL | cut -d " " -f 1` # прочитанных сообщений: _SEENMSG=`echo $CHECKMAIL | cut -d "(" -f 2 | cut -d " " -f 1` # считаем общее количество сообщений: for i in `echo -ne $_TOTALMSG` do TOTALMSG=`echo $[ $TOTALMSG + $i ]` done # считаем количество прочитанных сообщений for i in `echo $_SEENMSG` do SEENMSG=`echo $[ $SEENMSG + $i ]` done # считаем количество непрочитанных сообщений: NEWMSG=`echo $[ $TOTALMSG - $SEENMSG ]` # выдаём строку "непрочитанных/всего": #echo $NEWMSG/$TOTALMSG # или просто "непрочитанных": echo $NEWMSG


Заодно настройки fetchmail (~/.fetchmailrc):

Код: Выделить всё

poll imap.gmail.com with proto IMAP
    user "mail@gmail.com" there with password "password"
    options nofetchall keep ssl


Количество сообщений считается конструкцией for i in... Может можно и по другому, не знаю. В общем, в пианиста не стрелять, играет как умеет :).
Вывод скрипта можно прикрутить в панель WM или в prompt.
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Black писал(а):
06.09.2008 21:32
Количество сообщений считается конструкцией for i in... Может можно и по другому, не знаю.
Первое, что пришло в голову:

Код: Выделить всё

set $_TOTALMSG
echo $#
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Полезные скрипты

Сообщение KernelPanic »

Скрипты дебианщика :)
Скрипт автоматической установки зависимостей, прописанных в файле *.dsc исходников, для сборки *.deb пакетов:

Код: Выделить всё

#!/bin/bash
##############################################################################
##                                                                          ##
##  This script tries to install all build-dependencies specified in input  ##
##  *.dsc file                                                              ##
##                                                                          ##
##############################################################################

# only dependencies in unused format
deps="`cat $1 | grep Build-Depends:`"
deps=${deps//"Build-Depends:"/""}

# Replaces substrings described in regular expressions ($regexp)
# with ""
function replace_regexp ()
{
  substr="not"
  while [ -n "$substr" ]
  do
    substr=`expr match "$deps" "$regexp"`
    deps=${deps//"$substr"/""}
  done
}

# dependencies without versions
regexp=".*\(([a-z0-9 -+.>=<~]*)\)"
replace_regexp

# dependencies without arch
regexp=".*\(\[[a-z0-9 -.>=<!]*\]\)"
replace_regexp

# dependencies without or symbols and "or-dependencies"
regexp=".*\(|[a-z0-9 .-]*\)"
replace_regexp

# dependencies without commas
deps=${deps//","/""}

echo -e "The following packages will be installed on your system:\n" $deps
su -c "aptitude install $deps"

Использование (у меня в примере носит имя dep-install):

Код: Выделить всё

$ dep-install путь_до_файла/имя_файла.dsc

Установка выполняется через su, поэтому скрипт лучше кидать в папку /usr/bin, тогда пользователям он виден :)
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable
Контактная информация:

Re: Полезные скрипты

Сообщение Portnov »

ээ аа apt-get build-dep уже не катит?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Полезные скрипты

Сообщение KernelPanic »

Катит, но только не для самостоятельно скачанных исходников, помещенных в нужные пользователю папки.
Спасибо сказали:
KernelPanic
Бывший модератор
Сообщения: 2060
Статус: Brain Атаке
ОС: Debian squeeze/sid/exp

Re: Полезные скрипты

Сообщение KernelPanic »

Скрипты Дебианщика :) продолжение.
Есть такая замечательная утилита по созданию локального репозитория reprepro, подробнее про ее использование можно посмотреть здесь.
Однако пользоваться только возможностями, предоставленными данной утилитой, иногда бывает крайне утомительно и долго, так как возможно вы хотите добавить только пакеты, находящиеся в какой-то папке (и/или ее падпапках), либо наоборот, только исходники, либо и то и другое, находящееся в одной папке, но разбросанных по подпапкам. Тогда придется несколько раз (возможно, много) пользоваться стандартной утилитой reprepro.
Данный скрипт поможет в таких случаях, автотматизируя процесс поиска пакетов (и/или исходников) по подпапкам:

Код:

#!/bin/bash ############################################################################## ## ## ## Скрипт пытается добавить пакеты и исходники, лежащие в указанной папке ## ## (а также ее подпапках, если выставлена опция), в локальный репозиторий, ## ## созданный программой reprepro ## ## ## ############################################################################## ## ## ## Параметры: ## ## -D PATH_TO_DIR - путь до папки, в которой нужно искать пакеты ## ## и/или исходники (если не указана, то текущая) ## ## -R REP_PATH - корневая папка репозитория ## ## * -C COMPONENT - раздел репозитория (main/contrib/non-free/...) ## ## * -N CODENAME - кодовое имя дистрибутива, (etch/lenny/...) ## ## ## ## Опции: ## ## По умолчанию скрипт ищет в указанной папке файл *.changes и пытается ## ## добавить исходники и пакеты в соответствии с данным файлом. Данные ## ## опции заставляют его работать по другому: ## ## -s - добавить исходники (.dsc, .diff.gz and .orig.tar.gz) ## ## -p - добавить пакеты (.deb and .udeb) ## ## -a - добавить пакеты и исходники ## ## -i - просматривать подпапки ## ## -maxdepth DEPTH - глубина просмотра подпапок, может быть указана ## ## только если указана опция -i (неотрицательное ## ## число, 1 соответствует поиску только в указанной ## ## папке, по аналогии с утилитой find) ## ## ## ## !!! Параметры, отмеченные "*", обязательные, остальные опционально !!! ## ## ## ############################################################################## # default parameters REP_PATH=/home/repository #ПАПКА РЕПОЗИТОРИЯ ПО УМОЛЧАНИЮ. ИЗМЕНИТЬ НА СВОЮ !!! PATH_TO_DIR=./ COMPONENT="" CODENAME="" DEPTH=1 ignore="y" #ignore unused parameters # default options opt_all="" opt_source="" opt_pack="" opt_change=1 opt_subdir="" # look at subdirectories opt_depth="" # Function parse options -s -a -p -i # $1 - options string function option_parse () { opt=${1/"-"/""} if [ `expr match "$opt" ".*\([i]\)"` ]; then opt_subdir=1 fi if [ `expr match "$opt" ".*\([a]\)"` ]; then opt_all=1 opt_change="" return fi if [ `expr match "$opt" ".*\([p]\)"` ]; then opt_pack=1 opt_change="" fi if [ `expr match "$opt" ".*\([s]\)"` ]; then opt_source=1 opt_change="" fi } # Maximum parameters count Num=0 # Filling the array of input parameters for input_param in $* do let "Num++" # Increment Num params[$Num]=$input_param done # Main checking cycle (check input parameters) for ((i=1; i <= Num ; i++)) do case ${params[$i]} in "-D") PATH_TO_DIR=${params[$i+1]} let "i++";; "-R") REP_PATH=${params[$i+1]} let "i++";; "-C") COMPONENT=${params[$i+1]} let "i++";; "-N") CODENAME=${params[$i+1]} let "i++";; -[sapi]* ) options=`expr match "${params[$i]}" "\(-[sapi]*$\)"` if [ "$options" = "" ] then params[$Num+1]="-exit" params[$Num+2]=`expr match "${params[$i]}" "\(-[sapi]*\)"` let "Num+=2" else option_parse $options fi;; "-maxdepth" ) DEPTH=${params[$i+1]} opt_depth=1 let "i++";; * ) echo -n "There is unused parameter specified. Ignore? (y/N): " read ignore; if [ "$ignore" = "y" ] || [ "$ignore" = "Y" ] then echo "Ignoring unused parameters ..." else { echo "Operation canceled. Exiting ..." exit } fi;; esac done depth_param="-maxdepth $DEPTH" if [ $opt_subdir ] then depth_param="" if [ $opt_depth ] then depth_param="-maxdepth $DEPTH" fi fi # Find files with specified extension # $1 - file extension function find_files () { list="`find $PATH_TO_DIR $depth_param -name \"*.$1\"`" files="" #array of filenames with specified extension f_num=0 for names in $list do let "f_num++" files[$f_num]=$names done } function list_files { for ((i=1; i <= f_num; i++)) do echo ${files[$i]} done } # Add files to repository # $1 - file extension # $2 - include mode (include/includedsc/includedeb/includeudeb) # $3 - string for message function add_files () { # Find files with extension specified find_files $1 # Check if there is no files if [ -z "$list" ] then echo "There is no *.$1 file found." fi for ((i=1; i <= f_num; i++)) do if [ -n "$3" ] then echo $3 ${files[$i]} fi reprepro -b $REP_PATH -C $COMPONENT $2 $CODENAME ${files[$i]} done } # If using .changes file if [ $opt_change ] then add_files "changes" "include" "Add files specified in" exit fi # if need to add packages and sources if [ $opt_all ] then add_files "deb" "includedeb" "Add" add_files "udeb" "includeudeb" "Add" add_files "dsc" "includedsc" "Add sources for" exit fi # if need to add packages if [ $opt_pack ] then add_files "deb" "includedeb" "Add" add_files "udeb" "includeudeb" "Add" fi # if need to add sources if [ $opt_source ] then add_files "dsc" "includedsc" "Add sources for" fi

Пример использования.
Дано:
1. Есть репозиторий, соданный при помощи утилиты reprepro, находящийся в папке /home/repository.
2. В домашней папке пользователя user есть подпапка debian, в которой несколько подпапок, в каждой из которых по несколько пакетов (могут быть *.deb и *.udeb).
Нужно: добавить все пакеты, находящиеся в подпапках папки /home/user/debian/ в локальный репозиторий для lenny, в раздел main.

Очень просто (в примере скрипт называется reprepro-add):

Код: Выделить всё

# reprepro-add -C main -D /home/user/debian/ -N lenny -pi
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

t.t писал(а):
06.09.2008 22:03
Первое, что пришло в голову:

Код: Выделить всё

set $_TOTALMSG
echo $#

$# - это, я так понимаю, количество переданных аргументов. Немного не то. Сделал через awk:

Код:

#!/bin/sh # каталоги imap, в которых проверять (через запятую): IMAPDIRS="INBOX,dir1,dir2" # вывод fetchmail: CHECKMAIL=`fetchmail -c -r $IMAPDIRS` # всего сообщений: _TOTALMSG=`echo $CHECKMAIL | cut -d " " -f 1` # прочитанных сообщений: _SEENMSG=`echo $CHECKMAIL | cut -d "(" -f 2 | cut -d " " -f 1` # считаем общее количество сообщений: TOTALMSG=`echo $_TOTALMSG | awk -v _totalmsg="$_TOTALMSG" '{ totalmsg += $1} END {print totalmsg}'` # считаем количество прочитанных сообщений: SEENMSG=`echo $_SEENMSG | awk -v _seenmsg="$_SEENMSG" '{ seenmsg += $1} END {print seenmsg}'` # считаем количество непрочитанных сообщений: let "NEWMSG = $TOTALMSG - $SEENMSG" # выдаём строку "непрочитанных/всего": #echo $NEWMSG/$TOTALMSG # или просто "непрочитанных": echo $NEWMSG
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
Dimon93rus
Сообщения: 428
Статус: Kernel Killer

Re: Полезные скрипты

Сообщение Dimon93rus »

А нету скрипта для перевода тегов в mp3 файлах, из транслита в нормальный текст?
Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Black писал(а):
07.09.2008 20:19
$# - это, я так понимаю, количество переданных аргументов. Немного не то.
Почему не то? Там разве не разделённые пробелами "слова" надо считать? Я понял так исходя из
Black писал(а):
06.09.2008 21:32
for i in `echo -ne $_TOTALMSG`


Может быть, set $(echo -ne $_TOTALMSG) ?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

t.t писал(а):
09.09.2008 13:37
Black писал(а):
07.09.2008 20:19
$# - это, я так понимаю, количество переданных аргументов. Немного не то.
Почему не то? Там разве не разделённые пробелами "слова" надо считать? Я понял так исходя из
Black писал(а):
06.09.2008 21:32
for i in `echo -ne $_TOTALMSG`

Может быть, set $(echo -ne $_TOTALMSG) ?

Нет.

Код: Выделить всё

%> fetchmail -c -r INBOX,dir1,dir2
10 messages (9 seen) for qwerty@gmail.com at imap.gmail.com (folder INBOX).
8 messages (5 seen) for qwerty@gmail.com at imap.gmail.com (folder dir1).
3 messages (3 seen) for qwerty@gmail.com at imap.gmail.com (folder dir2).

cat'ом вырезается столбец из цифр, их надо сложить. Таким вот "изящным" способом я это делал, пока не дошло про awk %).
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Прошу прощения, не разглядел. Мне почему-то показалось, что там не $i, а единичка каждый раз прибавляется, т.е. как бы счётчик. А если сумма, то я бы так сделал:

Код: Выделить всё

TOTALMSG=$(( $(echo $_TOTALMSG | sed 's/ /+/g') ))
Кстати, конструкции `...` и $[...] уже давно deprecated (не могу адекватно это слово на русский перевести) -- вместо них рекомендуется использовать $(...) и $(( ... )) соответственно. По первой я сам даже как-то напоролся: http://forum.posix.ru/viewtopic.php?id=943
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Полезные скрипты

Сообщение yamah »

TechnoMag писал(а):
27.08.2008 10:28
yamah писал(а):
27.08.2008 08:06
Скрипт для монтирования образов дисков с графическим и текстовым интерфейсом лежит сдесь.
Зависимость следует также уточнить в этой теме.


Зависимости:
dialog, Xdialog.
Давно уже входят в состав многих дистрибьютивов.

Дык, никто не спорит, что не входят! Иногда нужно еще и установить пакеты из репа. :)
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

Скрипт для сканирования. Использует scanimage (из пакета sane-backends), convert (из ImageMagic), c44 (из пакета djvu или djvulibre).
Запускать так:
scan [-r разрешение] [-m режим] [-f формат] [префикс]
Разрешение - число dpi (по умолчанию 240). Режим: l - lineart, g - grayscale, c - color (по умолчанию grayscale). Формат - любой, поддерживаемый ImageMagic или djvu (по умолчанию png). Префикс - часть имени в начале, за которым следует трёхзначное число и суффикс (.png, .jpg, .djvu итд). Чтобы сканировать следующее изображение, надо нажать enter, иначе - "n" и enter.

Код:

#!/bin/zsh # default options num=001 # counter starting number defres=240 # default resolution (dpi) defmode=Color # default mode deffmt=png # default format # commandline options while getopts "r:m:f:h" Option; do case $Option in r) res=$OPTARG ;; m) _mode=$OPTARG ;; f) fmt=$OPTARG ;; h) echo 'Usage: '$(basename $0)' [-r res] [-m mode] [h] [prefix] -r res - resolution in dpi (default 240). -m mode - scan mode. Can be: l - lineart; g - grayscale; c - color (default). -f fmt - format (any supported by ImageMagic and djvu). Default png. WARNING! If unsupported format specified, pnm file will be created. -h - short usage message (you read it now). prefix - filename prefix.' exit 0;; esac done shift $(( $OPTIND - 1 )) # transforming options case $_mode in l) mode="Lineart";; g) mode="Gray";; c) mode="Color";; esac # applying default options, if not specified if [ -z $res ]; then res=$defres; fi if [ -z $mode ]; then mode=$defmode; fi if [ -z $fmt ]; then fmt=$deffmt; fi prefix="$1" # print short summary echo Resolution: $res dpi echo Mode: $mode echo Format: $fmt echo Prefix: $prefix echo cont=y while [[ $cont != n ]]; do # I don't know how to do this in one line... if [[ -n $prefix ]] then printf "scanning image %s%.3d.%s...\n" $prefix $num $fmt else printf "scanning image %.3d.%s...\n" $num $fmt fi if [ $fmt != djvu ] then scanimage -p --resolution $res --mode $mode | convert - $prefix$num.$fmt else # c44 not supports stdin, so we shall create temporary pnm # file scanimage -p --resolution $res --mode $mode > $prefix$num.pnm c44 -dpi $res $prefix$num.pnm $prefix$num.$fmt rm -f $prefix$num.pnm fi let "num += 1" num=$(printf %.3d $num) echo echo -ne " done.\n" echo -ne "scan next image? (*/n): " read cont echo done exit 0
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Black писал(а):
16.09.2008 16:08
if [ -z $res ]; then res=$defres; fi
if [ -z $mode ]; then mode=$defmode; fi
if [ -z $fmt ]; then fmt=$deffmt; fi

1. При такой проверке условий нужно переменную брать в кавычки, т.к., если она окажется пустой, shell выдаст синтаксическую ошибку на команду [.
2. Можно писать короче:

Код: Выделить всё

[ -z "$res" ] && res=$defres


Black писал(а):
16.09.2008 16:08
# I don't know how to do this in one line...
if [[ -n $prefix ]]
then printf "scanning image %s%.3d.%s...\n" $prefix $num $fmt
else printf "scanning image %.3d.%s...\n" $num $fmt
fi

Код: Выделить всё

echo -n "scanning image $prefix"
printf "scanning image %.3d.%s...\n" $num $fmt
Так? Как вариант:

Код: Выделить всё

[ -z "$prefix" ] && prefix=""
printf "scanning image %s%.3d.%s...\n" $prefix $num $fmt
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

t.t писал(а):
16.09.2008 16:39
Black писал(а):
16.09.2008 16:08

if [ -z $res ]; then res=$defres; fi
if [ -z $mode ]; then mode=$defmode; fi
if [ -z $fmt ]; then fmt=$deffmt; fi

1. При такой проверке условий нужно переменную брать в кавычки, т.к., если она окажется пустой, shell выдаст синтаксическую ошибку на команду [.

Не совсем понял. [ -z $var ] - это и есть проверка того, не пуста ли переменная. Собственно она и оказывается пустой, если запустить скрипт без параметров. В этом месте не ругалось. А вот в while [ $cont != n ] он на это, похоже, и ругался. Правда сделал не так. Заменил [...] на [[...]], которая, кроме всего прочего, нормально воспринимает пустые переменные.

t.t писал(а):
16.09.2008 16:39
2. Можно писать короче:

Код: Выделить всё

[ -z "$res" ] && res=$defres

Я знаю. Просто как-то уже привык для таких случаев использовать if...then...else.

t.t писал(а):
16.09.2008 16:39
Black писал(а):
16.09.2008 16:08

# I don't know how to do this in one line...
if [[ -n $prefix ]]
then printf "scanning image %s%.3d.%s...\n" $prefix $num $fmt
else printf "scanning image %.3d.%s...\n" $num $fmt
fi

Код: Выделить всё

echo -n "scanning image $prefix"
printf "scanning image %.3d.%s...\n" $num $fmt

Так? Как вариант:

Код: Выделить всё

[ -z "$prefix" ] && prefix=""
printf "scanning image %s%.3d.%s...\n" $prefix $num $fmt


Я так понял, после prefix="" printf всё-равно воспринимает её как пустую переменную. А вот первый вариант - самое то, спасибо.

Кстати, пардон, с запозданием:
t.t писал(а):
09.09.2008 22:15
Прошу прощения, не разглядел. Мне почему-то показалось, что там не $i, а единичка каждый раз прибавляется, т.е. как бы счётчик. А если сумма, то я бы так сделал:

Код: Выделить всё

TOTALMSG=$(( $(echo $_TOTALMSG | sed 's/ /+/g') ))

Пробовал, там не пробел, а \n, а sed за пределы строки вылезать не умеет.
t.t писал(а):
09.09.2008 22:15
Кстати, конструкции `...` и $[...] уже давно deprecated (не могу адекватно это слово на русский перевести) -- вместо них рекомендуется использовать $(...) и $(( ... )) соответственно. По первой я сам даже как-то напоролся: http://forum.posix.ru/viewtopic.php?id=943

Спасибо, будем знать.
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Black писал(а):
16.09.2008 19:51
Не совсем понял. [ -z $var ] - это и есть проверка того, не пуста ли переменная. Собственно она и оказывается пустой, если запустить скрипт без параметров. В этом месте не ругалось. А вот в while [ $cont != n ] он на это, похоже, и ругался. Правда сделал не так. Заменил [...] на [[...]], которая, кроме всего прочего, нормально воспринимает пустые переменные.
Да, прошу прощения, зарапортовался. Не то оно когда-то давно так реагировало, не то я с = / != спутал.

Black писал(а):
16.09.2008 19:51
Я знаю. Просто как-то уже привык для таких случаев использовать if...then...else.
Понятно (: Я привык писать более лаконичный вариант.

Black писал(а):
16.09.2008 19:51
Пробовал, там не пробел, а \n, а sed за пределы строки вылезать не умеет.
echo заменяет последовательность любых пробельных символов одиночным пробелом:

Код: Выделить всё

t:~$ tmp='1
> 2
> 3
> 4
> 5
> 6'
t:~$ echo $tmp
1 2 3 4 5 6
t:~$ echo $(( $(echo $tmp | sed 's/ /+/g') ))
21
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

И правда, bash заменяет. Только вот у меня zsh, который почему-то не хочет. Причём ни встроенное echo, ни /bin/echo:

Код: Выделить всё

╔(#5000)=[~]=[1:17:24]=(j:0)=(s:0)
╚%> tmp='1
 ╚═3:dquote> 2
 ╚═4:dquote> 3
 ╚═5:dquote> 4
 ╚═6:dquote> 5'
╔(#5001)=[~]=[1:17:28]=(j:0)=(s:0)
╚%> echo $tmp
1
2
3
4
5
╔(#5002)=[~]=[1:17:36]=(j:0)=(s:0)
╚%> /bin/echo $tmp
1
2
3
4
5

Хотя в bash оба echo заменяют. Не понятно %).
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Black писал(а):
16.09.2008 22:12
Не понятно
Да, действительно, zsh вообще себя как-то странно с закавыченными пробельными символами ведёт:
(bash) писал(а):t:~/tmp/test$ tmp='1 2 3 4'
t:~/tmp/test$ for i in $tmp; do echo $i$i; done
11
22
33
44
(zsh) писал(а):localhost% tmp='1 2 3 4'
localhost% for i in $tmp; do echo $i$i; done
1 2 3 41 2 3 4
При том, что
(zsh) писал(а):localhost% for i in $(seq 4); do echo $i$i; done
11
22
33
44
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Black
Сообщения: 1100
ОС: ArchLinux

Re: Полезные скрипты

Сообщение Black »

t.t писал(а):
16.09.2008 22:36
Да, действительно, zsh вообще себя как-то странно с закавыченными пробельными символами ведёт: <...>

Нашёл. Это не баг, это фича %):
(man zshexpn) писал(а):Note in particular the fact that words of unquoted parameters are not automatically split on whitespace unless the option SH_WORD_SPLIT is set; see references to this option below for more details. This is an important difference from other shells.

Т.е., если сделать setopt SH_WORD_SPLIT, то zsh будет обращаться с пробелами так же, как и bash. Кстати, в режиме эмуляции sh (когда запущен ссылкой /bin/sh) zsh тоже ведёт себя как bash.
Есть ещё один способ:
(man zshexpn) писал(а):${=spec}
Perform word splitting using the rules for SH_WORD_SPLIT during the evaluation of spec, but regardless of whether the parameter appears in double quotes; if the `=' is doubled, turn it off.

Код: Выделить всё

╔(#5000)=[~]=[18:24:22]=(j:0)=(s:0)
╚%> test='1 2 3'
╔(#5001)=[~]=[18:24:26]=(j:0)=(s:0)
╚%> for i in ${=test}; do echo $i$i; done
11
22
33
╔(#5002)=[~]=[18:24:40]=(j:0)=(s:0)
╚%> test='1
 ╚═4:quote> 2
 ╚═5:quote> 3'
╔(#5003)=[~]=[18:24:47]=(j:0)=(s:0)
╚%> echo ${=test}
1 2 3
Компьютер служит для решения тех проблем, которых до изобретения компьютера не существовало
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Полезные скрипты

Сообщение t.t »

Понятно, спасибо. Непонятно только, зачем эту фичу по умолчанию включили.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Ответить