Доброго времени!
Хотел задать пару вопросов по нижеследующей функции. Функция используется в скрипте, создающем
клиентские почтовые сертификаты. Всё работает.... да только не нравится мне кое что, каряво как-то.Собственно, "?":
Какие иные варианты возможны для реализации данной задачи.
Хочется получить рекомендации, позитивную критику и советы.Пинайте меня! Но по делу и аргументированно.
#!/bin/sh
.....
переменные
.....check() {
if [ $# -eq 1 ]; then val1=0
else val1=1
filen=${#1} #Вот здесь мне не нравится..... как ещё можно получить кол-во аргументов?
#и здесь проверка громоздкая
if [ $len -ge $min ] && [ $len -le $max ]; then val2=0
else val2=1
ficase ${1} in
*[!a-zA-Z0-9]*|"") val3=1;;
*) val3=0;;
esac
}check $1
fin=1
while [ $fin -eq 1 ]
do
fin=0; a=0
for a in $val1 $val2 $val3 # как-то можно без for обойтись?
do
if [ $a -eq 0 ]; then
else fin=1; failure=1; echo; echo -e '\033[31mСледует использовать:\033[0m'; echo "${0##*/} username - БуКвЫ и цифры."; \
echo -e '\033[1mИмя пользователя:\033[0m'; read one && check $one && break;fi
done
done
Поясню, имел ввиду следующее:Проверка кол-ва аргументов: (т.е имя юзера д.б. из одного слова)
>if [ $# -eq 1 ]; then val1=0
> else val1=1
>fi
> len=${#1} Кол-во символов аргумента (слова).Иначе никак?
Вместо for можно так:
sum = $val1+$val2+$val3
if [ $sum -eq 0 ]; then
else
.................
fi
> if [ $len -ge $min ] && [ $len -le $max ];И чё, никто косяка не видит?
>> if [ $len -ge $min ] && [ $len -le $max ];
> И чё, никто косяка не видит?По подробнее пожалуйста.
Если $len больше или равно $min "И" $len меньше или равно $max ; Хотя бы один фолс - возвратит фолс, если первый фолс, второй не проверяется ... обычная бинарная конъюнкция
Что не верно?