MyTetra Share
Делитесь знаниями!
Полезные_скрипты 5
Время создания: 09.01.2019 16:40
Автор: alensav
Текстовые метки: scripts, скрипт
Раздел: MyTetra - SAVSCRIPTS

yamah

Сообщения: 1102

ОС: Rosa Fresh, Debian, RELS

Контактная информация:

Контактная информация пользователя yamah

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

Сообщение yamah » 23.05.2008 11:12

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

Содержание (ссылки на скрипты)
Скрипты для гугления можно взять
тут.
Скрипт для переключения между двумя звуковыми картами можно взять
здесь.
Скрипт для автоматической перекодировки текстовых файлов лежит
тут.
Переименование русских имен файлов в транслит
Скрипт-напоминатель.
Скрипт массового конвертирования видео в 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 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...

Спасибо сказали:

QWERTYASDF

Вернуться к началу

BlackStar

Сообщения: 1338

Статус: We are all Kosh

ОС: Fedora 10

Контактная информация:

Контактная информация пользователя BlackStar

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

Сообщение BlackStar » 23.05.2008 11:53

Скрипт - напоминатель. Зависимости:
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 "Сделать скриншот"


Результат:

Вложения

LightLang Team

Вернуться к началу

Палач

Сообщения: 623

Статус: ASUS Eee 1000HE

ОС: Gentoo ~x86 / Simply 5.0

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

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

Скрипт для получения прямых 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

Сообщения: 1102

ОС: Rosa Fresh, Debian, RELS

Контактная информация:

Контактная информация пользователя yamah

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

Сообщение yamah » 27.08.2008 08:06

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

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

Вернуться к началу

rm_

Сообщения: 3340

Статус: It's the GNU Age

ОС: Debian

Контактная информация:

Контактная информация пользователя rm_

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

Сообщение rm_ » 27.08.2008 09:10

BlackStar писал(а):

23.05.2008 11:53Пример:

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



Скрипт для быстрого создания скриншотов.
Требует scrot, zenity, pngcrush.

Протокол IPv6: что он может дать нам уже сегодня?

Вернуться к началу

TechnoMag

Сообщения: 298

ОС: Debian 8.0 Jessie

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

Сообщение TechnoMag » 27.08.2008 10:28

yamah писал(а):

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



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

- Домашний Linux -
Памятки для пользователя

Вернуться к началу

eddy

Сообщения: 3321

Статус: Красный глаз тролля

ОС: ArchLinux

Контактная информация:

Контактная информация пользователя eddy

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

Сообщение eddy » 27.08.2008 11:32

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

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

#!/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 » 28.08.2008 06:04

Зависимости: 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 » 06.09.2008 16:19

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


а я пользуюсь 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

Сообщения: 1086

ОС: Gentoo

Контактная информация:

Контактная информация пользователя Black

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

Сообщение Black » 06.09.2008 21:32

Скрипт для проверки наличия почты по 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.

В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com

Вернуться к началу

t.t

Бывший модератор

Сообщения: 7390

Статус: думающий о вечном

ОС: Debian, LMDE

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

Сообщение t.t » 06.09.2008 22:03

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 » 06.09.2008 22:21

Скрипты дебианщика
Скрипт автоматической установки зависимостей, прописанных в файле *.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

Контактная информация:

Контактная информация пользователя Portnov

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

Сообщение Portnov » 06.09.2008 22:34

ээ аа apt-get build-dep уже не катит?

Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия:
моя домашняя страница -http://iportnov.ru

Вернуться к началу

KernelPanic

Бывший модератор

Сообщения: 2060

Статус: Brain Атаке

ОС: Debian squeeze/sid/exp

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

Сообщение KernelPanic » 06.09.2008 22:39

Катит, но только не для самостоятельно скачанных исходников, помещенных в нужные пользователю папки.

Вернуться к началу

KernelPanic

Бывший модератор

Сообщения: 2060

Статус: Brain Атаке

ОС: Debian squeeze/sid/exp

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

Сообщение KernelPanic » 07.09.2008 17:26

Скрипты Дебианщика продолжение.
Есть такая замечательная утилита по созданию локального репозитория
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

Сообщения: 1086

ОС: Gentoo

Контактная информация:

Контактная информация пользователя Black

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

Сообщение Black » 07.09.2008 20:19

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

В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com

Вернуться к началу

Dimon93rus

Сообщения: 428

Статус: Kernel Killer

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

Сообщение Dimon93rus » 08.09.2008 11:27

А нету скрипта для перевода тегов в mp3 файлах, из транслита в нормальный текст?

Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86

Вернуться к началу

t.t

Бывший модератор

Сообщения: 7390

Статус: думающий о вечном

ОС: Debian, LMDE

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

Сообщение t.t » 09.09.2008 13:37

Black писал(а):

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

Почему не то? Там разве не разделённые пробелами "слова" надо считать? Я понял так исходя из

Black писал(а):

06.09.2008 21:32for i in `echo -ne $_TOTALMSG`



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

¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж

Вернуться к началу

Black

Сообщения: 1086

ОС: Gentoo

Контактная информация:

Контактная информация пользователя Black

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

Сообщение Black » 09.09.2008 19:25

t.t писал(а):

09.09.2008 13:37

Black писал(а):

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

Почему не то? Там разве не разделённые пробелами "слова" надо считать? Я понял так исходя из

Black писал(а):

06.09.2008 21:32for 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 %).

В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com

Вернуться к началу

t.t

Бывший модератор

Сообщения: 7390

Статус: думающий о вечном

ОС: Debian, LMDE

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

Сообщение t.t » 09.09.2008 22:15

Прошу прощения, не разглядел. Мне почему-то показалось, что там не $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 » 16.09.2008 09:55

Замена всех пробелов в именах файлов подчёркиваниями, начиная от текущего каталога.

¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж

Вернуться к началу

yamah

Сообщения: 1102

ОС: Rosa Fresh, Debian, RELS

Контактная информация:

Контактная информация пользователя yamah

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

Сообщение yamah » 16.09.2008 11:17

TechnoMag писал(а):

27.08.2008 10:28

yamah писал(а):

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



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


Дык, никто не спорит, что не входят! Иногда нужно еще и установить пакеты из репа.

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

Вернуться к началу

Black

Сообщения: 1086

ОС: Gentoo

Контактная информация:

Контактная информация пользователя Black

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

Сообщение Black » 16.09.2008 16:08

Скрипт для сканирования. Использует 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

В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com

Вернуться к началу

t.t

Бывший модератор

Сообщения: 7390

Статус: думающий о вечном

ОС: Debian, LMDE

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

Сообщение t.t » 16.09.2008 16:39

Black писал(а):

16.09.2008 16:08if [ -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

Сообщения: 1086

ОС: Gentoo

Контактная информация:

Контактная информация пользователя Black

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

Сообщение Black » 16.09.2008 19:51

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:392. Можно писать короче:

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

[ -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


Спасибо, будем знать.

В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com

Вернуться к началу

t.t

Бывший модератор

Сообщения: 7390

Статус: думающий о вечном

ОС: Debian, LMDE

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

Сообщение t.t » 16.09.2008 20:51

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

Сообщения: 1086

ОС: Gentoo

Контактная информация:

Контактная информация пользователя Black

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

Сообщение Black » 16.09.2008 22:12

И правда, 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 заменяют. Не понятно %).

В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com

Вернуться к началу

t.t

Бывший модератор

Сообщения: 7390

Статус: думающий о вечном

ОС: Debian, LMDE

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

Сообщение t.t » 16.09.2008 22:36

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нεиж

Вернуться к началу


 
MyTetra Share v.0.53
Яндекс индекс цитирования