LINUX.ORG.RU

[хочется странного 2]#!/bin/sh case + while/until


0

1

Перерыл пол инета, но ответ не нашел, хотя он где-то рядом:(

Есть переменная, собственно права на файлы/каталоги вида 644, 755, и т.п.

Необходимо:

1) считать ее с помощью read
2) проверить ее формат, (вдруг пользователь заснул на клаве, и вел вместо прав билиберду)
3) если формат неверный, отчитаться что неизвестный формат и предложить заново ввести.

★★★★★

блин, надо было в Admin. Модераторы, если не сложно, перенесите ее пожалуйста туда.

leg0las ★★★★★
() автор топика

читаешь read'ом, сразу делаешь chmod, смотришь результат chmod, если не нулевой - значить формат неверный, читаешь ещё раз.

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

вариант, только у меня сначала ввод прав для файлов/директорий, изменение владельца/грцппы, а потом find + chmod / chown. Вариант конечно, но не смый лучший. Если надо могу скрипт выложить.

leg0las ★★★★★
() автор топика

Как-то так?

#!/bin/sh
while :
do
 read -p "Введите права на файл: " oct
 case "$oct" in ([0-7][0-7][0-7]) break ;; esac
 echo "Неверный ввод: $oct"
done
echo $oct

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

если сначала информацию собираешь то да, не вариант, но вон ниже на регулярном выражении уже вариант.

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

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

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

Вот кусок скрипта.

#!/bin/sh

DEF_MODE_FILE="644"

while :
do
read -p "Permission for files [default 644]:" MODE_FILE
case "$MODE_FILE" in ([0-7][0-7][0-7] | "" ) break ;; esac
echo "Invalid input: $MODE_FILE"
done
if ! test "$MODE_FILE"
then MODE_FILE="$DEF_MODE_FILE"
echo "Set permission for files $MODE_FILE"
else
echo "Set permission for files $MODE_FILE";
fi

Работает.

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

if ! test «$MODE_FILE»
then MODE_FILE=«$DEF_MODE_FILE»
echo «Set permission for files $MODE_FILE»
else
echo «Set permission for files $MODE_FILE»;
fi

ИМХО, повторяющийся код стоит вынести за пределы if...else...fi.

AITap ★★★★★
()
Ответ на: комментарий от AITap
echo "Set permission for files $MODE_FILE"

не совсем повторяющийся. в первом случае, когда переменная пустая, присвоится выведется дефолтное значение прав, во втором - которое присовил юзер.

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

имеет ввиду так:

#!/bin/sh

DEF_MODE_FILE="644"

while :
do
read -p "Permission for files [default 644]:" MODE_FILE
case "$MODE_FILE" in ([0-7][0-7][0-7] | "" ) break ;; esac
echo "Invalid input: $MODE_FILE"
done
if ! test "$MODE_FILE"
then MODE_FILE="$DEF_MODE_FILE"
fi
echo "Set permission for files $MODE_FILE"
hope13 ★★★
()
Ответ на: комментарий от leg0las

Нет, не дважды.

«Если переменная не задана, то задать и вывести сообщение. Иначе вывести сообщение» эквивалентно «Если переменная не задана, то задать её. В любом случае вывести сообщение».

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

не распарсил.

«Если переменная не задана, то задать и вывести сообщение. Иначе вывести сообщение о значении переменной»

как то так.

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

а, вчехлил что от меня хотите:). то для отладки делал, щас можно убрать одно сообщение.

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

ниасилил табличку?:) буквенные значения как по мне менее понятны, особенно с знаками +/-. Всегда пользовался восьмеричными.

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