The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не работает скрипт BASH для автомонтирования USB-flash"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от varrkan (ok) on 29-Ноя-10, 13:59 
Уважаемые форумчане, требуется наладить автомотрирование USB-Flash под Ubuntu Server 10.10. Сервер работает без Иксов. Нашёл в интернетах скрипт, скопипастил. Не работает. Помогите пожалуйста разобраться. Сразу скажу - в bash не очень силён. Код скрипта, в меру своих возможностей, попытался понять. Вроде как должно работать, но...
Вот код:

#!/bin/bash
# Задаем стартовые переменные
lockfile=/tmp/automount.lock
# lock файл необходим когда одновременно монтируется несколько разделов одного устройства
mountpoint="/dev/"$2
# превращаем точку монтирования в правильный вид
# Выбираем действие
# msd - монтирование /dev/sdX устройств - чаще всего USB накопителей
# msr - монтирование cdrom которые обычно обозначаются как /dev/srX\
# u - отмонтирование устройств
case "$1"
in
msd)
# Проверяем наличие lock файла и если он есть спим 2 секунды
while [ -f $lockfile ]
do sleep 2 done
# Создаем lock файл и получаем метку раздела в качестве точки монтирования
touch $lockfile DLABEL=`/sbin/udevadm info --query=all --name=$mountpoint | sed -n s@"S: disk/by-label/"@@p`
# Проверяем что метка у раздела есть, а если нет, то в качестве метки берем имя производителя
if [ -z "$DLABEL" ];
then DLABEL=`/sbin/udevadm info --query=all --name=$mountpoint | grep ID_VENDOR | sed s/"E: ID_VENDOR="//g`
fi
# Проверяем нет ли уже такой точки монтирования, а если есть то пытаемся добавить к имени -1, -2 итд.
if [ `/bin/ls -1 --hide=cdrom --color=none /media | sed s/"\/"//g | grep -cx $DLABEL` -gt 0 ];
then k=1 DLABELN=$DLABEL'-'$k
while [ `/bin/ls -1 --hide=cdrom --color=none /media | sed s/"\/"//g | grep -cx $DLABELN` -gt 0 ]
do k=`expr $k + 1` DLABELN=$DLABEL'-'$k done
DLABEL=$DLABELN fi
# В качестве варианта к метке просто добавляем имя раздела (то есть -sdX)
# if [ -d /media/$DLABEL ]; then
# DLABEL=$DLABEL"-"$2
# fi
# Монтируем и удаляем lock файл
pmount -A $mountpoint $DLABEL 2>/dev/null rm $lockfile
;;
msr)
# предполагаем что в системе только один оптический привод, находим метку диска и монтируем
LABEL=`volname $mountpoint` pmount $mountpoint $DLABEL
;;
u)
# Проверяем количество смонтированых устройств
# /media/cdrom это точка монтирования прописанная в /etc/fstab в моем дистрибутиве
set `/bin/ls -1 --hide=cdrom --color=none /media | wc -l`
case "$1"
in
0)
echo "Нечего отмонтировать!" ;; 1)
DLABEL=`/bin/ls -1 --hide=cdrom --color=none /media` cd /media pumount $DLABEL 2>/dev/null
# Проверяем код возврата pmount. Если больше 0 то операция не удалась
if [ $? -gt 0 ];
then echo "Операция отмонтироования "$DLABEL" не удалась"
fi
;;
*)
echo "Много монтированных устройств. Выбирайте одно."
# Получаем список монтированных устройств и печатаем его с порядковым номером каждой точки монтирования
set `/bin/ls -1 --hide=cdrom --color=none /media` k=1 for i in "$@" do
echo $k " "$i k=`expr $k + 1` done
# Читаем номер
echo -n "Введите номер отмонтируемого устройства:" read x
# Снова получаем список и бежим по нему. Если k=x то делаем как в предыдущем случае (то есть 1)
set `/bin/ls -1 --hide=cdrom --color=none /media` k=1 for i in "$@" do
if [ $x = $k ];
then cd /media
pumount $i 2>/dev/null
if [ $? -ne 0 ];
then echo "Операция отмонтироования "$i" не удалась"
fi
exit 0
fi
k=`expr $k + 1` done
;;
esac
;;
esac

А вот ответ консоли:


/usr/bin/automount: line 35: syntax error near unexpected token `;;'
/usr/bin/automount: line 35: `;;'


Скрипт взял здесь http://www.openkazan.info/node/3098. Судя по дате публикации и дате последнего комментария (около полутора лет тому) - ответа от автора вряд ли получил бы, потому решил спросить здесь.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от meantraitor on 29-Ноя-10, 14:35 

> if [ `/bin/ls -1 --hide=cdrom --color=none /media | sed s/"\/"//g | grep
> -cx $DLABEL` -gt 0 ];
> then k=1 DLABELN=$DLABEL'-'$k
> while [ `/bin/ls -1 --hide=cdrom --color=none /media | sed s/"\/"//g | grep
> -cx $DLABELN` -gt 0 ]
> do k=`expr $k + 1` DLABELN=$DLABEL'-'$k done
> DLABEL=$DLABELN fi

Или fi на на новую строку перенести, или писать 'DLABEL=$DLABELN ; fi'

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от varrkan (ok) on 29-Ноя-10, 16:36 
>> if [ `/bin/ls -1 --hide=cdrom --color=none /media | sed s/"\/"//g | grep
>> -cx $DLABEL` -gt 0 ];
>> then k=1 DLABELN=$DLABEL'-'$k
>> while [ `/bin/ls -1 --hide=cdrom --color=none /media | sed s/"\/"//g | grep
>> -cx $DLABELN` -gt 0 ]
>> do k=`expr $k + 1` DLABELN=$DLABEL'-'$k done
>> DLABEL=$DLABELN fi
> Или fi на на новую строку перенести, или писать 'DLABEL=$DLABELN ; fi'

Спасибо, сделал так

DLABEL=$DLABELN ; fi

Ничего не изменилось, после этого по-переносил все
done
на новую строку, скрипт вроде запустился, ошибок небыло, но монтирование так и не заработало. Буду копать дальше.
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от pavlinux (ok) on 02-Дек-10, 00:06 
> Уважаемые форумчане, требуется наладить автомотрирование USB-Flash под Ubuntu Server
> 10.10. Сервер работает без Иксов.

udev надеюсь не выкинули?

# Udev rules for udevmountd

# Skip 'add' events for device-mapper
ACTION=="add", SUBSYSTEM=="block", KERNEL=="dm-*", GOTO="skip_mount"
ACTION=="add", SUBSYSTEM=="block", KERNEL=="md*", GOTO="skip_mount"
ACTION=="change", SUBSYSTEM=="block", KERNEL=="dm-*", ENV{DM_TARGET_TYPES}=="crypt", GOTO="skip_mount"
ACTION=="add", SUBSYSTEM=="block", ENV{FSTAB_OPTS}=="*nofail*", IMPORT="udevmountd"
ACTION=="change", SUBSYSTEM=="block", KERNEL=="dm-*", ENV{FSTAB_OPTS}=="*nofail*", IMPORT="udevmountd"
ACTION=="change", SUBSYSTEM=="block", KERNEL=="md*", ENV{FSTAB_OPTS}=="*nofail*", IMPORT="udevmountd"

ACTION=="add|change", ENV{FSCK_STATE}=="unknown|clean", RUN+="udevmountd add"
ACTION=="remove", ENV{FSTAB_OPTS}=="*nofail*", RUN+="udevmountd remove"

LABEL="skip_mount"

udevmountd  должен находиться в /lib/udev/ (иль где там в Убунте)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от ImPressed (ok) on 17-Дек-10, 20:55 
>[оверквотинг удален]
> esac
>
> А вот ответ консоли:
>
 
> /usr/bin/automount: line 35: syntax error near unexpected token `;;'
> /usr/bin/automount: line 35: `;;'
>

> Скрипт взял здесь http://www.openkazan.info/node/3098. Судя по дате публикации и дате
> последнего комментария (около полутора лет тому) - ответа от автора вряд
> ли получил бы, потому решил спросить здесь.

Попробуйте autofs или pmount

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от varrkan (ok) on 19-Дек-10, 18:27 
> Попробуйте autofs или pmount

Ну.. В виду того, что меня "ушли" с работы - топик теряет актуальность. Всем ответившим - огромное спасибо. :)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Не работает скрипт BASH для автомонтирования USB-flash"  +/
Сообщение от pavlinux (ok) on 28-Дек-10, 04:04 
>> Попробуйте autofs или pmount
> Ну.. В виду того, что меня "ушли" с работы - топик теряет
> актуальность. Всем ответившим - огромное спасибо. :)

Жестокие люди, за не сделанный скрипт увольняют. :)
Скоро за memleak и double free расстреливать будут.  

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру