Skocz do zawartości

Edycja Pliku Za Pomocą Skryptu.


morg

Rekomendowane odpowiedzi

Cześć.

 

W jaki sposób rozdzielic działanie skryptu (rozpakowanie archiwum zip) w zależności od serwera na którym pracuje?

 

np na:

 

HP-UX (nazwa pliku: h.zip)

AIX (nazwa pliku: a.zip)

 

 

 

 

Początek i koniec skryptu jest bez zmnian.

 

 

M.

 

 

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Pętlę "if" wypadałoby zakończyć zgrabnym "fi" ;)

Co do pytania o "done" to nie widzę powodu, żeby się skrypt tu zatrzymał. Jedynym miejscem wyskoku jest koniec skryptu lub słowo kluczowe "exit".

 

Jeśli systemów jest więcej niż dwa można się posłużyć "case .... esac".

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Rozwiązanie:

 

uname  >serwer
serwer=`cat serwer`

if
[[ $serwer = "HP-UX" ]]
then
  echo "hpek"
fi

if
[[ $serwer = "AIX" ]]
then
  echo "aixik"
fi


if
[[ $serwer = "SunOS" ]]
then
  echo "sunik"
fi
if
[[ $serwer = "Linux" ]]
then
echo "linux"
fi

 

 

 

 

Wyniki:

-------

hp-ux:$ ./a
hpek

------
[morg@gburdzy test]$ ./a
linux

-------

aix:/wdr$ ./a
aixik
aix:/wdr$

------

galeo:/home/gburdzy$ ./a
sunik
galeo:/home/gburdzy$
-----

 

Dziękuję za pomoc.

 

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

To sobie jeszcze elif-y podopisuj.

 

Jakie znowu elif-y ?

 

 

Nie ma znaczenia szybkosc. Pobiera ze zmiennej jaki to serwer i rozpakowuje zipa dedykowanego na ten serwer. Pozniej go nazywa po swojemu i wrzuca do podkatalogu.

 

Oto cialo tej procedury:

 

# ----------------- Rozdzielenie exe na poszczegolne katalogi
# ------------------------ w zaleznosci od serwera 

cd Roboczy

# -- start 

uname  >serwer
serwer=`cat serwer`

if
[[ $serwer = "HP-UX" ]]
then
  ls h* >nazwa_exe 
    cut -f2 nazwa_exe | cut -d'.' -f1 >wersja.exe
     unzip h*
       exe=`cat wersja.exe`
fi

if
[[ $serwer = "AIX" ]]
then
  ls a* >nazwa_exe
    cut -f2 nazwa_exe | cut -d'.' -f1 >wersja.exe
     unzip a*
       exe=`cat wersja.exe`
fi

if
[[ $serwer = "SunOS" ]]
then
  ls o* >nazwa_exe
    cut -f2 nazwa_exe | cut -d'.' -f1 >wersja.exe
     unzip o*
       exe=`cat wersja.exe`
fi

# -- nie wykorzystywane --

#if
#[[ $serwer = "Linux" ]]
#then
#echo "linux"
#fi

# ----- koniec

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jakie znowu elif-y ?
jak jest "if" to jest też "elif" - podobnie jak "if" i "else" ;)

 

[EDIT]

Aż się prosi o funkcję i case ;)

function funkcja 
{    ls ${system}* >nazwa_exe
    cut -f2 nazwa_exe | cut -d'.' -f1 >wersja.exe
     unzip ${system}*
       exe=`cat wersja.exe`
}

case ${server} in 
  "HP-UX")     system="h"
         ;;
  "AIX")     system="a"
         ;;
  "SunOS")    system="o"
         ;;
  *)        echo "Nie ma takiego systemu"
          exit 1
         ;;
esac
#zawołaj
funkcja

Tak na szybko - nie testowałem.

Edytowane przez WalDo
Odnośnik do komentarza
Udostępnij na innych stronach

Widze że jeszcze dużo się muszę nauczyć :)

 

 

M.

 

 

Edit.1:

 

Re. UP:

 

Nie działa.

 

Nazwe serwera pobiera poprawnie ale do plików nazwa.exe i wersja.exe wrzuca wszystkie pliki z katalogu.

 

hp-ux:/Roboczy$ ./a
Nie ma takiego systemu

 

Popatrze na to w domu, w ramach organizacji czasu wolnego :)

 

Z pomocą książki i mana poprawie a Wy zweryfikujecie czy kod jest optymalny.

 

M.

 

 

 

Edit2:

 

HP-UX:$ ls ${system}

a              h9_5133n0.zip  o9_5150a0.zip  wersja.exe
a9_5150b2.zip  nazwa_exe      serwer

 

Tu nieprawidlowo interpretuje zmienna.

 

a gdy wpisałem serwer:

 

hp-ux:/$ ls ${serwer}
HP-UX not found
hp-ux:/$

 

 

Popatrze na to w domu.

 

 

M.

 

 

 

 

EDIT:

 

Jednak zrezygnowałem z tej funkcji. Czytelniejszy (i co najwazniejsze że działa) jest ten sposób który wyżej opisałem.

 

Dziękuję za pomoc.

M.

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 month later...

Wróciłem do tematu z innym zadaniem, a mianowicie wykonanie komendy w zależności od tego w jakim katalogu pracuje skrypt:

 

sprawdz_katalog()
polecenie=""
{
funkcja()
{ katalog=`pwd | awk 'BEGIN { FS="/"} {print $NF}' `
echo $katalog
}

case ${katalog} in
  "katalog_1")     polecenie="polecenie"
    ;;
  "katalog_2")     polecenie="polecenie"
    ;;
  "katalog_3")    polecenie="polecenie"
    ;;
  *)    polecenie=""
    echo "W tym katalogu nie uruchamiamy $polecenie"
    
    ;;
esac

funkcja
echo $polecenie

}

 

i wykonanie

sprawdz_katalog

 

M.

 

 

EDIT: Opisówka

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
×
×
  • Dodaj nową pozycję...