LINUX.ORG.RU

подскажите несложный скрипт на bash


0

0

Нужно импортировать пользователей в файл авторизации для squid-а. Есть cvs файл вида: user1;pwd1 user2;pwd2

Подскажите plz как скриптом можно получать имя и пароль юзера и для каждого из них выполнить команду: htpasswd -b /etc/squid/users $user $pwd и дополнительно преобразовывать имя пользователя в нижний регистр.

Там наверное несложно, просто опыта написания скриптов на баше нет.

anonymous

файл есессно вот такой 
user1;pwd1
user2;pwd2

форматирование не выбрал.

anonymous
()

Как на bash не знаю, если пойдёт на perl-е, то вот:

#!/usr/bin/perl
$upfile="userpass"; #имя файла с содержимым вида юзер;пароль

open (USERS,"$upfile");
@lines=<USERS>;
close USERS;

foreach $line (@lines) {
($user, $pass) = split(/;/, $line);
$user=lc($user);
system ("htpasswd -b /etc/squid/users $user $pass");
}

0;

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

За 

open (USERS,"$upfile");
@lines=<USERS>;
close USERS; 

стрелять надо.

Вся программа должна выглядеть так:

#!/usr/bin/perl 

while (<>) {
my ($u,$p) = split /;/;
system ("htpasswd -b /etc/squid/users ".lc($u)." $p")
}

так

1) короче
2) потребляет гораздо меньше памяти
3) позволяет стандартным образом редирект ввода/вывода
4) корректно с точки зрения use strict

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

>стрелять надо.

Если Вы всех новичков в кодинге перестреляете, кто ж Вам на смену то придёт? :)

За Ваш код и пояснения спасибо - буду знать.

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

И то правда, если пошел perl -F, то можно уже и на awk переписывать 8)

awk -F\; '{print tolower($1) " "$2}' | xargs -n2 htpasswd -b /etc/squid/users

(посчитав) нет, так на 5 символов длиннее 8(

Zulu ★★☆☆
()

всем спасибо за помощь :)

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