Problem ze skryptem

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

Problem ze skryptem

Post 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ź
Awatar użytkownika
dedito
Moderator
Posty: 3512
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Problem ze skryptem

Post autor: dedito »

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: 2302
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: Problem ze skryptem

Post 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?
robi78g
Posty: 7
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post autor: robi78g »

To czego trzeba użyć zamiast read, to grep generuje mi pliki.
robi78g
Posty: 7
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post 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ć
Awatar użytkownika
dedito
Moderator
Posty: 3512
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Re: Problem ze skryptem

Post autor: dedito »

Przydałyby się te pliki na których testujesz skrypt.
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2302
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Re: Problem ze skryptem

Post 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.
robi78g
Posty: 7
Rejestracja: 13 października 2020, 23:02

Re: Problem ze skryptem

Post 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
Awatar użytkownika
lizard
Beginner
Posty: 287
Rejestracja: 08 lutego 2016, 18:47

Re: Problem ze skryptem

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

Re: Problem ze skryptem

Post 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.
ODPOWIEDZ