Witaj na Forum Linuxiarzy
Zanim zalogujesz się, by pisać na naszym forum, zapoznaj się z kilkoma zasadami savoir-vivre'u w dziale Administracja.
Wiadomości z problemami zamieszczone w wątku "Przywitaj się" oraz wszelkie reklamy na naszym forum będą usuwane.

Generator configu Samby - pobieranie kolejnych linii z innego pliku

Zaczęty przez mes mariusz, Marzec 01, 2017, 07:47:40 AM

Poprzedni wątek - Następny wątek

mes mariusz

Witam.

Chciałbym sobie napisać bashowy skrypt - generator configu Samby, który będzie pobierał dane z oddzielnych plików i generował wynikowy smb.conf

Prośba o podpowiedź, jakich narzędzi mogę użyć, by pobierać kolejne linie (adresy IP) z pliku maszyny_user1.txt o zawartości:

192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6


i na podstawie tego utworzyć (w ramach ćwiczenia na razie tyle) plik smb.conf o zawartości:

hosts allow = 192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6
Coby nie zamęczać - manuale doczytam, prośba tylko o wskazanie narzędzi.

lesio

Możliwości realizacji jest wiele, np.:
1.  zamiana końca linii na przecinki
     echo -n "hosts allow = " >smb.conf
     cat maszyny_user1.txt|tr "\n" "," >>smb.conf
2. wczytywanie linia po linii:
    echo -n "hosts allow = " >smb.conf
    cat maszyny_user1.txt|while read adres
    do
        echo -n  "$adres," >>smb.conf
    done

tylko tutaj problem z ostatnim przecinkiem - trzeba zmodyfikować pętlę :-)

mes mariusz

Napisałem już sobie działający generator, ale pojawiła się potrzeba dodania do jednego zasobu adresy IP kilku różnych userów. W związku z powyższym zmodyfikowałem skrypt do postaci:

#!/bin/bash

function dodaj_adresy
{
lista_serwerow=($(<Komputery-$user.txt))
sep=','
bar=$(printf "${sep}%s" "${lista_serwerow[@]}")
bar=${bar:${#sep}}
echo "$bar" >> ./smb.conf
}

echo -e "# Data generacji konfiguracji: `date +%Y.%m.%d-%T` \n\r" > ./smb.conf

# cat ./samba_content_general.txt >> ./smb.conf

echo "[Data-Mariusz]
comment = /mnt/Users/Users/Mariusz
guest ok = yes
path = /mnt/Users/Users/Mariusz
read only = no
create mask = 0777
directory mask = 0777
browseable = no" >> ./smb.conf

echo " host allow: " >> ./smb.conf
user=Mariusz
dodaj_adresy
user=user2
dodaj_adresy


Niestety nie wiem, jak dodać coś na koniec ostatniej linii istniejącego pliku, ponieważ ">>" dodaje nową linię za ostatnią, a to generuje taki problem:

host allow:
192.168.1.2,192.168.1.3,192.168.1.4
192.168.1.5,192.168.1.6,192.168.1.7


A ja potrzebowałbym dostać wynik taki:

host allow: 192.168.1.2,192.168.1.3,192.168.1.4,192.168.1.5,192.168.1.6,192.168.1.7

lesio

Szkoda, że nie zapoznałeś się z moją poprzednią odpowiedzią. Przeadresowanie ">"  i ">>" nie tworzy nowej linii, tylko dopisuje na końcu pliku. Opcja "-n" dla polecenie "echo" powoduje, że na końcu linii nie ma znaku końca linii i przejścia do nowego wiersza. Dopisywanie jest wtedy w tej samej linii.

Zobacz najnowsze wiadomości na forum