LINUX.ORG.RU

как правильно написать условие в простом скрипте?


0

1

добрый день всем!

не ругайте сильно, если неправильно выбрал раздел - новичок я в linux и подробно изучать его пока нет особой потребности. задача такая: хочу написать скрипт, который при наличии в выводе команды mount строки

/dev/sda1 on /mnt type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

будет выполнять следующие команды:

umount /dev/sda1

mount -o iocharset=utf8 /dev/sda1 /mnt

общий вид команды условия if then fi представляю, но не знаю, как правильно вписать в условие проверку - не достаточно хорошо знаю синтаксис. оболочка - прошивка dd-wrt для роутера. пробовал так:

a=$(mount | grep vfat)

if [ $a=«/dev/sda1 on /mnt type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)» ]; then

umount /dev/sda1

mount -o iocharset=utf8 /dev/sda1 /mnt

fi

echo $a

не работает, хотя на экран выводит вышеуказанную строчку. подскажите, пожалуйста, где ошибка и как корректнее всего сделать эту проверку?

и еще вопрос: при указанном выше способе монтирования, система ругается в dmesg, что utf8 плохо для fat, так как чувствительно к регистру. но iocharset=866 не монтирует под предлогом того, что в системе нет такого набора символов. есть ли какая-нибудь команда для проверки, какие наборы символов есть в системе?


> [ $a=«текст» ]
Между ставниваемыми аргументами и командой сравнения должен стоять пробел.
Т.е. правильно будет [ «$a» = «текст» ].
Подробнее man test.

И да, почему бы не настроить роутер таким образом, чтобы он изначально монтировал флешку с iocharset=utf8? (например, написать строчку в fstab?)

AITap ★★★★★ ()

А там что, udev нет?

Ну или просто в fstab нужное записать?

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от AITap

А ещё лучше будет сделать конструкцию вида:
if mount | grep vfat | grep -q iocharset=iso8859-1; then ...; fi

Обратите внимание на отсутствие скобок (т.к. это команда, здесь скобки не нужны; кстати, само по себе выражение в скобках является командой).

Вам же нужно проверить, нет ли томов с vfat, у которых iocharset=iso8859-1? Вот и проверяйте только это, а всё остальное игнорируйте.

Совсем хорошо будет, если Вы не будете хардкодить имя устройства, на котором должна оказаться ФС vfat. А вдруг на флешке несколько разделов? А вдруг флешек несколько?

mount | grep vfat | grep iocharset=iso8859-1 | while read dev zzz mnt qqq # ищем vfat, ищем iocharset=iso8859-1, читаем в переменные: $dev (имя устройства), $zzz (слово on), $mnt (точка монтирования), $qqq (всё остальное)
do
umount $dev
mount -o iocharset=utf8 $dev $mnt
done

AITap ★★★★★ ()
Ответ на: комментарий от AITap

я не нашел, как его заставить изменить умолчания монтирования. дома посмотрю, где находится fstab, но я сильно подозреваю, что прошивка либо не даст мне его править, либо он будет сбрасываться при перезагрузке роутера.

sherv ()
Ответ на: комментарий от Eddy_Em

про udev от вас первый раз слышу. почитаю позже, что это такое и с чем его едят - дома попробую...

sherv ()
Ответ на: комментарий от sherv

Найти его легко (он должен быть где обычно), если будет перезаписываться - поискать init-скрипты, которые это делают и подправить их.

про udev от вас первый раз слышу

А вот зря. Через udev тоже можно по-человечески автомонтирование настроить.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от AITap

ок. спасибо за готовый скрипт. в принципе, не вижу причин ему не заработать на роутере. дома проверю. если все заработает - первую часть вопроса можно считать закрытой. а по поводу наборов символов - существует способ проверить, какие установлены? а то боюсь, что действительно есть вероятность поиметь проблем с чувствительностью к регистру на fat...

sherv ()
Ответ на: комментарий от sherv

итак, скрипт уважаемого AITap заработал нормально, так что первую проблему считаю решенной.

на всякий случай посмотрел fstab и udev, но папки udev в etc не обнаружил, на основании чего предполагаю, что его там таки нет. а что писать в fstab, чтобы именно fat подключался так, как надо, не затрагивая при этом параметры остальных фс, я с ходу не придумал. да и не нужно оно мне сейчас - вариант со скриптом в данном случае меня вполне устраивает. спасибо вам обоим за содействие!

остается открытым вопрос про кодировки, но он, похоже, больше подходит для другого раздела форума...

sherv ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.