Problem ze skryptem

Potrzebujesz pomocy z C, C++, perl, python, itp.
robi78g
Posty: 5
Rejestracja: 13 października 2020, 23:02

Problem ze skryptem

Post autor: robi78g » 13 października 2020, 23:06

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ź

Awatar użytkownika
dedito
Moderator
Posty: 3207
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Problem ze skryptem

Post autor: dedito » 14 października 2020, 07:53

Nie wygląda aby działał wg opisu.
Nie rozumiem tej linijki:

Kod: Zaznacz cały

grep "^" $plik | while read MAC;

Awatar użytkownika
LordRuthwen
Moderator
Posty: 2175
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: Problem ze skryptem

Post autor: LordRuthwen » 14 października 2020, 08:44

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?

robi78g
Posty: 5
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post autor: robi78g » 14 października 2020, 09:30

To czego trzeba użyć zamiast read, to grep generuje mi pliki.

robi78g
Posty: 5
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post autor: robi78g » 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ć

Awatar użytkownika
dedito
Moderator
Posty: 3207
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Problem ze skryptem

Post autor: dedito » 14 października 2020, 10:23

Przydałyby się te pliki na których testujesz skrypt.

Awatar użytkownika
LordRuthwen
Moderator
Posty: 2175
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: Problem ze skryptem

Post autor: LordRuthwen » 14 października 2020, 11:39

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.

robi78g
Posty: 5
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post autor: robi78g » 14 października 2020, 12:35

Witam
Załączam pliki
To w takim razie trzeba dodać zmienne które za pomocą read będą czytać linijka po linijce z pliku

Awatar użytkownika
lizard
Beginner
Posty: 281
Rejestracja: 08 lutego 2016, 18:47

Re: Problem ze skryptem

Post autor: lizard » 14 października 2020, 13:18

  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
Ostatnio zmieniony 14 października 2020, 17:27 przez lizard, łącznie zmieniany 2 razy.

robi78g
Posty: 5
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post autor: robi78g » 14 października 2020, 17:05

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.

ODPOWIEDZ