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:

Kod: Zaznacz cały

grep "^" $plik | while read MAC;

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
  1. 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
  2. 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
  3. 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.