LINUX.ORG.RU

bash работа с циклами.

 


1

4

Здравствуйте! С bash познакомился недавно, когда поднимал прокси, интересный язык, только я пока многого не понимаю. Смысл в чем есть файл с логинами login.list и файл с паролями pass.list их надо прочитать и записать в таком виде login:CL:Pass. Примерно я понимаю как, ну суть ни как не уловлю. Получилось так:

for u in `cat login.list`; do
 echo -n "$u:CL:$p "
done
script_contents=( $(cat "$d") )
   for p in `cat pass.list`; do
 echo -n "$u:CL:$p " 
done

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

Перемещено Falcon-peregrinus из web-development

Используй paste, Люк!

iVS ★★★★★ ()

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

anonymous ()
:| paste -d ':CL' login.list - - - pass.list
beastie ★★★★★ ()
Ответ на: комментарий от beastie

Не пали! Может тогда ТС маны начнёт читать. :)

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

Спасибо, вроде работает, но CL нет, получается логин:пароль.

AnonimS ()

не перл(не жемчужинова-молотова)


python -c "for z,x in list(zip(open(' login.list','r').read().split(),open('pass.list','r').read().split())): print z+':CL:'+x"
qulinxao ★★☆ ()

for u in `cat login.list`; do

Подскажите, пожалуйста, где вы все эту глупость подсматриваете?

Построчное чтение файла на Баше выглядит так:

while read; do
    printf '%s\n' "$REPLY"
done < login.list

script_contents=( $(cat "$d") )

Вообще не понял, что́ вы этой конструкцией с двойной подоболочкой хотели сказать.

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

Смыл в том, что у меня есть 100 логинов и 100 паролей, хочу автоматически генерировать конфиг. Получить надо:

config /usr/local/3proxy/3proxy.cfg
auth strong
users user1:CL:pass1 user2:CL:pass2 
allow user1
parent 1000 extip ipv6 
0
allow user2
parent 1000 extip ipv6 
0
2-3 логина так заполню, но когда их 100 или 300, уже не так легко, проще 1 раз написать скрипт, который будет брать новые логины, новые ip и новые пассы и генерировать конфиг. Пока получил что-то вроде этого:
#!/bin/bash

echo #!/usr/local/bin/3proxy
echo config /usr/local/3proxy/3proxy.cfg
echo auth strong

echo -n "users "
users=`python -c "for z,x in list(zip(open('login.list','r').read().split(),open('pass.list','r').read().split())): print z+':CL:'+x"`
echo $users
s=`python -c "for q in list(zip(open ('login.list','r').read().split())): print q"`
for i in `cat ip.list`; do
    echo "allow $s"
    echo "parent 1000 extip $i 0"
 
done
Данный скрипт выводит users как надо, а вот allow нет. Надо чтобы соотнести логины с ip, а выводится полный список..

ps. в баше не много понимаю.

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

Смыл в...

Вот уж воистину. Дубль два.

for i in `cat ip.list`; do

Подскажите, пожалуйста, где вы все эту глупость подсматриваете?

Построчное чтение файла на Баше выглядит так:

while read; do
    printf '%s\n' "$REPLY"
done < login.list

Если поближе к задаче, то попеременное чтение двух файлов можно сделать вот так:

#!/bin/bash

while read -r -u 0 login && read -r -u 3 pass; do
    printf '%s\n' "${login}:CL:${pass}"
done \
    0< "login.list" \
    3< "pass.list"
Zmicier ★★★★★ ()
Ответ на: комментарий от AnonimS

И да!

users=`python -c "for z,x in list(zip(open('login.list','r').read().split(),open('pass.list','r').read().split())): print z+':CL:'+x"`
echo $users

Ни при каких обстоятельствах удалять из строки переводы строк при помощи echo $string нельзя. Я уже не говорю о том, что здесь их достаточно было бы не выводить, если уж они вам были не нужны.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от Zmicier

#!/bin/bash

echo #!/usr/local/bin/3proxy echo config /usr/local/3proxy/3proxy.cfg echo auth strong

while read -r -u 0 login && read -r -u 3 pass; do printf '%s\n' «${login}:CL:${pass}» done \ 0< «login.list» \ 3< «pass.list»

# ser=`python -c «for q in list(zip(open ('login.list','r').read().split())): print q»` while read -r -u 0 login && read -r -u 3 ip; do

printf '%s\n' «allow ${login}» echo «parent 1000 extip ${ip} 0» done \ 0< «login.list» \ 3< «ip.list»

AnonimS ()
Ответ на: комментарий от Zmicier
#!/bin/bash

echo #!/usr/local/bin/3proxy
echo config /usr/local/3proxy/3proxy.cfg
echo auth strong

while read -r -u 0 login && read -r -u 3 pass; do
    printf '%s\n' "${login}:CL:${pass}"
done \
    0< "login.list" \
    3< "pass.list"

# ser=`python -c "for q in list(zip(open ('login.list','r').read().split())): print q"`
while read  -r -u 0 login && read -r -u 3 ip; do

    printf '%s\n' "allow ${login}"
     echo "parent 1000 extip ${ip} 0"
done \
    0< "login.list" \
    3< "ip.list"
AnonimS ()
Ответ на: комментарий от AnonimS

echo #!/usr/local/bin/3proxy

И в каком смысле эта строка у вас «работает», интересно знать?

И в общем-то нет необходимости читать один и тот же файл дважды, но да ладно, бог с вами.

И да, каким редактором вы пользуетесь, что у вас постоянно отступы едут?

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от AnonimS

продолжая верить что не розыгрышь

вот больше соответсвует дух software tools и unix way: команда с строка для мега-скрипта

python <<.  
for (a,b) in zip($filelogins,$filepasswds):
        print a+":C:"+b
.

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

А каким редактором надо пользоваться? Пробелы вчера удалял, а где-то добавлял, не хочет давать результат, который поймет 3proxy, оказывается users должны быть в строчку, ну я думаю это поправлю. Как-то не заметил:

echo #!/usr/local/bin/3proxy
Убрал эту строчку. С пробелами и отступами сейчас буду разбираться.

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

А каким редактором надо пользоваться?

Ну очевидно, что тем, который не будет перекладывать на вас работу по расстановке отступов. Их много. Ну, GNU Emacs, например.

echo #!/usr/local/bin/3proxy

Убрал эту строчку.

Я не говорил вам ее убирать, я спрашивал, что́ эта строчка (line) у вас должна делать, что вы говорите, что она «работает»? Если выводить на стандартный вывод #!/usr/local/bin/3proxy, то она этого очевидно не делает, поскольку незакавыченная решетка — это знак начала комментария. И вообще — тут не надо думать: строка (string) — значит закавычте.

оказывается users должны быть в строчку, ну я думаю это поправлю

Я тоже думаю, что заменить один символ новой строки (\n) на пробел (или табулятор, или что вам там нужно) не сложно.

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