morg Napisano Grudzień 21, 2012 Zgłoszenie Share Napisano Grudzień 21, 2012 Witam Czy znacie spośob pozwalający na rozróżnienie w kodzie dużych i małych liter? Chcę napisać skrypt, który będzie walidował bazy Oracle ( 9, 10 i 11) W wersji 11 jest właśnie włączone rozróżnianie duzych i małych znaków. A część użytkowników jest z małych ( tu nie ma problemu a część z dużych. Generalnie jest stały człon w nazwie a walidacja polega na wywołaniu skryptu po podłączeniu się sqlplus'em : Stały człon : UZYTKOWNIK1, uzytkownik2 Zmienny człon: PRZEDROSTEK1, PRZEDROSTEK2, przedrostek3 Nazwa użytkownika bazodanowego dla Oracle 11: PRZEDROSTEK1_UZYTKOWNIK1; przedrostek3_UZYTKOWNIK1 Nazwa użytkownika bazodanowego dla Oracle 9,10: przedrostek3_uzytkownik2 Część osób zakłada użytkowników tylko z dużej, część tylko z małej, inni jak im się podoba. I tutaj mam problem bo skrypty się wykładają na nazwach pisanych z dużej - bo sqlplus twierdzi, że nie ma takiego użytkownika. Czy znacie jakiś sposób na to ? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@jszubiak Napisano Grudzień 21, 2012 Zgłoszenie Share Napisano Grudzień 21, 2012 Możesz w skrypcie użyć klasy znaków "upper" w sensie: grep -E [[:upper:]] plik lub cat plik | tr '[[:lower:]]' '[[:upper:]]' - od razu zamieniając znaki i działać dalej na zunifikowanym strumieniu Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morg Napisano Grudzień 21, 2012 Autor Zgłoszenie Share Napisano Grudzień 21, 2012 Witam Dziekuje za odpowiedz jednakze nie do konca mnie ona satysfakcjonuje. Oto fragment kodu wprowadzajacy cale zamieszanie: Fukcje , które sie sprawdzaly do Oracle 10 wlacznie : WyodrebnijUzytkownikaOracle() { pusty=`cat def | tail -1 ` pelny=`cat def | sed '/^$/d'| tail -1 ` if [[ ${pusty} = ${pelny} ]]; then printf "\n" >>def fi user=` cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | sed -e 's/-c//' | cut -d'/' -f1 | tr '[:upper:]' '[:lower:]' ` haslo=`cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | sed -e 's/-c//' | cut -d'/' -f2 |cut -d'@' -f1 | tr '[:upper:]' '[:lower:]' ` def_sid=` cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | cut -d'@' -f2 | tr '[:upper:]' '[:lower:]' ` sufix=`echo $user | sed 's/\def//g' | tr '[:upper:]' '[:lower:]' ` } WyodrebnijUzytkownikaOraclePROC() { userPRC=` cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | sed -e 's/-c//' | cut -d'/' -f1 | sed 's/def/proc/g'` if [[ ${userPRC} = ${user} ]] ; then export userPRC= fi } I moja nieudana próba dostosowania do Oracle 11 w której usunalem konstrukcje upper:lower: WyodrebnijUzytkownikaOracle() { pusty=`cat def | tail -1 ` pelny=`cat def | sed '/^$/d'| tail -1 ` if [[ ${pusty} = ${pelny} ]]; then printf "\n" >>def fi user=` cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | sed -e 's/-c//' | cut -d'/' -f1` def_sid=` cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | cut -d'@' -f2` sufix=`echo $user | sed 's/\def//g'` } WyodrebnijUzytkownikaOraclePROC() { userPRC=` cat def | sed '/^$/d'| tail -1 | xargs -n1 echo |grep '^-c' | sed -e 's/-c//' | cut -d'/' -f1 | sed 's/def/proc/g'` if [[ ${userPRC} = ${user} ]] ; then export userPRC= fi } Funkcja WyodrebnijUzytkownikaOracle ma na celu wyciagniecie ze skryptów startujacych nazwe uzytkownika bazodanowego. W pierwotnej wersji miala na celu zunifikowanie wszystkiego do malych liter ( miedzy innymi do zakladania innych uzytkowników i importów plików dmp). Ale juz funkcje oparte na WyodrebnijUzytkownikaOraclePROC Swietnie sie sprawdzaly do Oracle 10 wlacznie. W Oracle 11 mam wlaczone rozróznianie wielkich i malych liter i tutaj sie wykladaja moje skrypty. Wiem w jaki sposób uzyc oraklowego polecenia ` select` aby wyswietlic nazwy uzytkowników z danej instancji, ale wszystkie nazwy sa i tak zapisane duzymi literami. Sam nie znam sposobu aby zbadac który czlon jest pisany z dyzych a który z malych liter a to jest sprawa kluczowa. M. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Grudzień 22, 2012 Zgłoszenie Share Napisano Grudzień 22, 2012 Sam nie znam sposobu aby zbadac który czlon jest pisany z dyzych a który z malych liter a to jest sprawa kluczowa. Nie rozumiem o co dokladnie chodzi, ale jesli mowa o samym rozróznianiu to majac rozdzielony prefix od nazwy uzytkownika to: echo PRZEDROSTEK1 | grep [!A-Z] # zwróci PRZEDROSTEK1 echo przedrostek3 | grep [!A-Z] # nic nie zwróci echo PRZEDROSTEK1 | grep [!a-z] # nic nie zwróci echo przedrostek3 | grep [!a-z] # zwróci przedrostek3 Btw. nie mozesz korzystac z jakiegos nowoczesnego jezyka skryptowego, jak np. Pythona? Twoje zycie staloby sie latwiejsze, a praca przyjemniejsza Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
@jszubiak Napisano Grudzień 22, 2012 Zgłoszenie Share Napisano Grudzień 22, 2012 W Oracle 11 mam wlaczone rozróznianie wielkich i malych liter i tutaj sie wykladaja moje skrypty. Wiem w jaki sposób uzyc oraklowego polecenia ` select` aby wyswietlic nazwy uzytkowników z danej instancji, ale wszystkie nazwy sa i tak zapisane duzymi literami. Sam nie znam sposobu aby zbadac który czlon jest pisany z dyzych a który z malych liter a to jest sprawa kluczowa. M. A to teraz rozumiem, czyli select z oracle 11 zwraca Ci zawsze duze literki i tyle. Jesli tak jest to nie ma takiej mozliwosci zebys w skrypcie shell-owym który odbiera te dane wykryl upper vs. lower, szukaj rozwiazania w selekcie i tyle, Szybki research w google pokazal ze mozesz uzyc REGEXP_LIKE zamiast LIKE w swoim selekcie..ale pewno juz próbowales... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
morg Napisano Grudzień 23, 2012 Autor Zgłoszenie Share Napisano Grudzień 23, 2012 thof: Zapomnialem dodac, ze moje maszyny maja okolo 10 lat. Niektóre ( HP-UX) z wielkim trudem przelknely powloke bash. jszubiak: Pójde Twoim tropem. Poszukam w firmie osób wladajacych jezykiem sqlplus. ===== Wracajac do pytania. Czy istnieje polecenie badajace wielkosc liter w LINUX/UNIX? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Styczeń 8, 2013 Zgłoszenie Share Napisano Styczeń 8, 2013 a jest tam "tr" ? http://www.thelinuxdaily.com/2011/02/testing-input-string-for-numeric-alpha-numeric-alpha-or-other-posix/ Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się