Problem ze skryptem który wybierze pewne daneze strumienia i zapisze je do pliku.

Potrzebujesz pomocy z C, C++, perl, python, itp.
Awatar użytkownika
tomek-debian
Posty: 33
Rejestracja: 28 października 2013, 09:33

Problem ze skryptem który wybierze pewne daneze strumienia i zapisze je do pliku.

Post autor: tomek-debian »

Witam. Mam pewnie dosyć prosty problem i częściowo go już rozwiązałem ale stanąłem w miejscu i nie wiem jak dalej go rozwiązać.

Potrzebuję zapisywać do pliku tekstowego odczytane numery kart zbliżeniowych.

Zainstalowałem

Kod: Zaznacz cały

apt-get libpcsclite1 pcscd pcsc-tools
Uruchamiam

Kod: Zaznacz cały

pcsc_scan

i kiedy kładę kartę na czytniku na ekranie wyświetlają mi się potrzebne informacje a nawet niestety zbyt dużo tzn np coś takiego.

Kod: Zaznacz cały

Fri Sep 25 10:01:25 2015
Reader 1: SCM Microsystems Inc. SCR 331-DI [Vendor Interface] (60400165) 00 01
  Card state: Card inserted,
  ATR: 3B F5 91 00 FF 91 81 XX XX XX XX XX XX XX XX XX XX

ATR: 3B F5 91 00 FF 91 81 XX XX XX XX XX XX XX XX XX XX
+ TS = 3B --> Direct Convention
+ T0 = F5, Y(1): 1111, K: 5 (historical bytes)
  TA(1) = 91 --> Fi=512, Di=1, 512 cycles/ETU
    7812 bits/s at 4 MHz, fMax for Fi = 5 MHz => 9765 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = FF --> Extra guard time: 255 (special value)
  TD(1) = 91 --> Y(i+1) = 1001, Protocol T = 1
-----
  TA(2) = 81 --> Protocol to be used in spec mode: T=1 - Unable to change - defined by interface bytes
  TD(2) = 71 --> Y(i+1) = 0111, Protocol T = 1
-----
  TA(3) = FE --> IFSC: 254
  TB(3) = 40 --> Block Waiting Integer: 4 - Character Waiting Integer: 0
  TC(3) = 00 --> Error detection code: LRC
+ Historical bytes: 41 08 00 00 00
  Category indicator byte: 41 (proprietary format)
+ TCK = 0D (correct checksum)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B F5 91 00 FF 91 81 XX XX XX XX XX XX XX XX XX XX
        Contactless Mifare





Uruchamiając polecenie

Kod: Zaznacz cały

pcsc_scan > numerykart
oczywiście te wszystkie informacje lądują do pliku niestety te niepotrzebne też.

Spróbowałem więc

Kod: Zaznacz cały

 pcsc_scan |grep ATR:
Niestety dla jednej karty otrzymuję informacje niezbędne dwa razy czyli coś takiego (jak widać z powyższego przykładu samego polecenia pcsc_scan tam ta informacja pojawia się dwa razy i stąd greep wyświetla ja dwa razy raz z wcięciem)

Kod: Zaznacz cały

 
  ATR: 3B F5 91 00 FF 91 81 XX XX XX XX XX XX XX XX XX XX
ATR: 3B F5 91 00 FF 91 81 XX XX XX XX XX XX XX XX XX XX

Potrzebuję tylko raz linijkę która zaczyna się od "ATR:" oraz linijkę z datą i godziną

próbowałem połaczyć te dwa plecenia

Kod: Zaznacz cały

 pcsc_scan |grep ATR: | >notka.txt
lub

Kod: Zaznacz cały

 pcsc_scan |grep ATR: >notka.txt
ale za każdym razem plik notka.txt jest pusty.
Awatar użytkownika
dedito
Moderator
Posty: 3518
Rejestracja: 18 listopada 2013, 21:07
Lokalizacja: Gliwice

Post autor: dedito »

Coś źle robisz bo wynik powinien znaleźć się w pliku notka.txt.
Ewentualnie spróbuj operować na pliku numerykart.
torrmen
Posty: 67
Rejestracja: 04 lutego 2013, 16:42
Lokalizacja: Wrocław (głównie)

Post autor: torrmen »

Kod działa Ci prawidłowo - grepujeszc po "ATR: 3B F5 91 00 FF 91 81 XX XX XX XX XX XX XX XX XX XX" a takich linijek jest... dwie :)

Aby otrzymać jedną informację zrób coś takiego :

Kod: Zaznacz cały

karta=`pcsc_scan | grep "ATR:" | head -n 1 | tail -n 1`;
echo "Odczytana karta : ${karta}";
Podobnie z datą i godziną :)
ODPOWIEDZ