MyTetra Share
Делитесь знаниями!
Полезные_скрипты 5
Время создания: 09.01.2019 16:40
Автор: alensav
Текстовые метки: scripts, скрипт
Раздел: MyTetra - SAVSCRIPTS
Запись: alensav/MyTetra2/main/base/1547041220x2wfg552jq/text.html на raw.githubusercontent.com

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

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

С ообщение 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

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

С ообщение Палач » 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

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

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

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

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

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

rm_

Сообщения: 3340

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

ОС: Debian

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

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

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

С ообщение 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

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

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

yamah писал(а):

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



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

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

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

eddy

Сообщения: 3321

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

ОС: ArchLinux

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

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

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

С ообщение 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

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

С ообщение 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

ОС: Кошерная.

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

С ообщение 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

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

С ообщение 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

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

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

Black писал(а):

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

Первое, что пришло в голову:

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

set $_TOTALMSG

echo $#

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

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

K ernelPanic

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

Сообщения: 2060

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

ОС: Debian squeeze/sid/exp

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

С ообщение 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

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

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

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

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

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

K ernelPanic

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

Сообщения: 2060

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

ОС: Debian squeeze/sid/exp

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

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

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

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

K ernelPanic

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

Сообщения: 2060

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

ОС: Debian squeeze/sid/exp

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

С ообщение 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

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

С ообщение 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

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

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

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

Ubuntu Server 10.04 x86, Calculate Linux 11.6 x86

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

t.t

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

Сообщения: 7390

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

ОС: Debian, LMDE

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

С ообщение 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

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

С ообщение 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

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

С ообщение 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

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

С ообщение t.t » 16.09.2008 09:55

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

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

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

yamah

Сообщения: 1102

ОС: Rosa Fresh, Debian, RELS

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

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

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

С ообщение 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

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

С ообщение 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

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

С ообщение 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

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

С ообщение 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

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

С ообщение 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

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

С ообщение 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

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

С ообщение 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.65
Яндекс индекс цитирования