Strona 1 z 2
Problem ze skryptem
: 13 października 2020, 23:06
autor: robi78g
Witam
Jestem tu nowy potrzebuje pomocy z pewnym skryptem.
Może opisze na początek jak ma działać i wkleje to co zrobiłem do tej pory i jaki mam problem.
Skrypt ma pobierać z 3 plików dane linia po linii.
Z pliku pierwszego pobiera ciąg znaków i z tego ciągu tworzy nazwę plików.
Z drugiego i trzeciego pliku pobiera również dane linia po lini i zapisuje obok siebie w utworzonym pliku.
Kod: Zaznacz cały
#!/bin/bash
plik=userzy
ipadresses=ipuser
mask=maske
grep "^" $plik | while read MAC;
do
touch $MAC
read answer < $ipadresses
read roblo < $mask
echo "ifconfig-push" $answer $roblo > $MAC
done
Obecny skrypt tworzy pliki o różnych nazwach tak jak powinno być ale zawartość w każdym pliku jest taka sama
W plikach zewnętrznych jest zwykły tekst
Z góry dzięki za odpowiedź
Re: Problem ze skryptem
: 14 października 2020, 07:53
autor: dedito
Nie wygląda aby działał wg opisu.
Nie rozumiem tej linijki:
Re: Problem ze skryptem
: 14 października 2020, 08:44
autor: LordRuthwen
1. Formatuj skrypt, łatwiej potem debugować, np dużo lepiej się go czyta, gdy wygląda tak jak poniżej od razu wiadomo co jest gdzie.
Kod: Zaznacz cały
#!/bin/bash
plik=userzy
ipadresses=ipuser
mask=maske
grep "^" $plik | while read MAC;
do
touch $MAC
read answer < $ipadresses
read roblo < $mask
echo "ifconfig-push" $answer $roblo > $MAC
done
2. Po co używasz read?
3. Nie bardzo też rozumiem sens użycia tego grepa połączonego z pętlą.
Zawartość jest taka sama bo i niby jak by się miała zmienić skoro jest zdefiniowana na starcie?
Re: Problem ze skryptem
: 14 października 2020, 09:30
autor: robi78g
To czego trzeba użyć zamiast read, to grep generuje mi pliki.
Re: Problem ze skryptem
: 14 października 2020, 09:33
autor: robi78g
Jeśli usunę ze skryptu zawartość pętli to generowane są puste pliki z poprawną nazwą, myślałem że jak wrzycę do petli read to bedą się wypełniać
Re: Problem ze skryptem
: 14 października 2020, 10:23
autor: dedito
Przydałyby się te pliki na których testujesz skrypt.
Re: Problem ze skryptem
: 14 października 2020, 11:39
autor: LordRuthwen
robi78g pisze: 14 października 2020, 09:33
Jeśli usunę ze skryptu zawartość pętli to generowane są puste pliki z poprawną nazwą, myślałem że jak wrzycę do petli read to bedą się wypełniać
No będą, ale tym co jest przypisane do zmiennych, a tu deklaracje masz na początku i nie zmieniasz tych zmiennych później w żadnym miejscu - stąd stała zawartość.
Zakładam, że to też są pliki z danymi, więc musisz obsłużyć poprawne ich odczytanie.
read pobiera dane ze standardowego wejścia, w twoim przypadku realizuje to przesunięcie bitowe, ale równie dobrze mógłbyś w ostatniej linii użyć zmiennych z początku skryptu i efekt byłby taki sam za to sam skrypt wykonałby się szybciej.
Pokaż format pliku wejściowego.
Re: Problem ze skryptem
: 14 października 2020, 12:35
autor: robi78g
Witam
Załączam pliki
To w takim razie trzeba dodać zmienne które za pomocą read będą czytać linijka po linijce z pliku
Re: Problem ze skryptem
: 14 października 2020, 13:18
autor: lizard
- Ponumeruj linie we wszystkich plikach:
Kod: Zaznacz cały
awk '{print NR " " $s}' $plik > ${plik}.tmp
awk '{print NR " " $s}' $ipaddresses > ${ipaddresses}.tmp
awk '{print NR " " $s}' $mask > ${mask}.tmp
- Połącz nowe pliki, usuwając numery wierszy i utwórz pliki końcowe:
Kod: Zaznacz cały
join ${plik}.tmp ${ipaddresses}.tmp | join - ${mask}.tmp | cut -d ' ' -f 2- |
while read Line; do
echo "ifconfig-push ${Line#* }" > "${Line%% *}"
done
- Posprzątaj:
Kod: Zaznacz cały
rm ${plik}.tmp ${ipaddresses}.tmp ${mask}.tmp
Re: Problem ze skryptem
: 14 października 2020, 17:05
autor: robi78g
Hej dzięki ale chyba coś jest nie tak albo ja coś robie źle skrypt się zawiesza.
stworzył mi plik w którym jest wpisana numeracja i nazwa pliku wewnątrz pliku.