Skocz do zawartości
Zaloguj się, aby obserwować  
mateusz232

Wykona mi ktos pare skryptow ?

Polecane posty

Witam

 

Mam do wykonania pare skryptow (oczywiscie zaplace ) czy ktos podjął by sie tego ?

 

Prosze pisac na priv

 

Możesz napisać w jakim języku te skrypty mają być?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

przykladowe zagadnienie jakie trzeba rozwiazac:

Wykorzystując shell i AWK napisać skrypt make_shadow_new.sh wykonujący następujące zadanie:

W bieżącym katalogu wywołania skryptu znajdują się pliki passwd.new i shadow, o formatach zgodnych ze specyfikacją formatów passwd i shadow, którą można znaleźć w manualach systemowych. W przypadku, gdy któregoś z tych plików brak, skrypt przerywa działanie i sygnalizuje błąd;

Dla każdego rekordu z pliku passwd.new posiadającego swój odpowiednik w pliku shadow, skrypt przepisuje rekord z shadow bez zmian do pliku shadow.new;

Dla każdego rekordu z pliku passwd.new nie posiadającego odpowiednika w pliku shadow, skrypt tworzy odp. rekord w pliku shadow.new, umieszczając w polu przeznaczonym na zakodowane hasło konta znak gwiazdki (*), pozostałe pola (oprócz pola przeznaczonego na login) pozostawiając pustymi;

Rekordy z pliku shadow nie posiadające odpowiedników w pliku passwd są w shadow.new pominięte;

Kolejność rekordów w shadow.new powinna być zgodna z ich kolejnością w passwd.new.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Wykorzystując shell i AWK napisać skrypt make_shadow_new.sh wykonujący następujące zadanie:

W bieżącym katalogu wywołania skryptu znajdują się pliki passwd.new i shadow, o formatach zgodnych ze specyfikacją formatów passwd i shadow, którą można znaleźć w manualach systemowych. W przypadku, gdy któregoś z tych plików brak, skrypt przerywa działanie i sygnalizuje błąd;

Dla każdego rekordu z pliku passwd.new posiadającego swój odpowiednik w pliku shadow, skrypt przepisuje rekord z shadow bez zmian do pliku shadow.new;

Dla każdego rekordu z pliku passwd.new nie posiadającego odpowiednika w pliku shadow, skrypt tworzy odp. rekord w pliku shadow.new, umieszczając w polu przeznaczonym na zakodowane hasło konta znak gwiazdki (*), pozostałe pola (oprócz pola przeznaczonego na login) pozostawiając pustymi;

Rekordy z pliku shadow nie posiadające odpowiedników w pliku passwd są w shadow.new pominięte;

Kolejność rekordów w shadow.new powinna być zgodna z ich kolejnością w passwd.new.

AWK jest w tym przypadku zbędny. Wyszłoby coś na kształt:

#!/bin/bash

# (C) Copyright 2008  przemoc <przemoc@...>
# License: donate-my-paypal-account-before-use

PASSWDNEW='./passwd.new'
SHADOW='./shadow'
SHADOWNEW='./shadow.new'

for FILE in "$PASSWDNEW" "$SHADOW"; do
if ! [ -r "$FILE" ]; then
	echo "CAUTION: $FILE doesn't exist or you don't have permission to read it."
	exit 1;
fi;
done

if ! echo -n > "$SHADOWNEW"; then
echo "CAUTION: $SHADOWNEW cannot be created or you don't have permission to write it."
exit 1;
fi

IFS=$'\n'

for LINE in $(cat "$PASSWDNEW"); do
NAME=${LINE%%:*}
if ! grep "^$NAME:" "$SHADOW" >> "$SHADOWNEW"; then
	echo "$NAME:*:::::::" >> "$SHADOWNEW";
fi;
done

Co do licencji: wystarczy symboliczne euro ;)

Oczywiście ten grep nie jest zbyt elegancki, ale przy nieogromnych plikach będzie dawał radę.

[OFF-TOPIC]

Rozwiązanie poprawniejsze z trzymaniem w pamięci również shadowa i usuwaniem spasowanych linii (nie możemy zakładać porządku analogicznego z passwd.new) byłoby nieco dłuższe i już lepiej (ze względów wydajnościowych) wypadałoby je zrobić w przyzwoitym języku skryptowym jak perl, którego dotychczas jakoś nigdy nie udało mi się poznać, no może poza podstawami i perl-re, co jednak nie pozwala na swobodną lekturę pozycji prezentowanych na perl golfie.

[/OFF-TOPIC]

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się

Zaloguj się, aby obserwować  

×