Полезные скрипты (или ПО для начинающих...)
Модератор: Модераторы разделов
119 сообщений
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нεиж
Вернуться к началу
Black
Сообщения: 1086
ОС: Gentoo
Контактная информация:
Контактная информация пользователя Black
R e: Полезные скрипты
Сообщение Black » 17.09.2008 15:21
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
В мире очень много психов. Каждый пятый - это псих.
Говори со мною тихо, может я - один из них?
monobook-font.googlecode.com