Marc_b. Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 Mam do zrobianie skrypt,wkleje moze tresc zdania "Napisać skrypt o nazwie „skrypt_05.sh”. Skrypt ma pobierać jeden parametr, będący nazwą interpretera powłoki (np. „bash”), należy sprawdzać, czy podano parametr i czy istnieje interpreter powłoki o takiej nazwie. Dla zadanego poprzez parametr interpretera, skrypt ma wyświetlać dla ilu użytkowników, ten interpreter jest interpreterem domyślnym. Wyświetlona lista ma zostać posortowana według ilości użytkowników, od liczby największej, do najmniejszej." no i fajnie,napisalem skrypt,tylko problem ze nie do konca dziala tak jak powinien :mur: ,wyglada tak "#!/bin/bash if [ $# -ne "1" ]; then echo "Niewlasciwa liczba parametrow!!"; echo "Sposob uzycia `basename $0`: [iterpreter]"; exit; fi if [ -e /bin/"$1" ]; then echo "Jest!"; else echo "Nie ma takiego iterpretera"; exit; fi iterpreter=$1; awk -F: ' $7~/\/'$iterpreter'$/ { licz+=1; } END {print "Razem "licz; }' /etc/passwd > temp.tmp awk -F: ' $7~/\/'$iterpreter'$/ { print $1; } ' /etc/passwd | sort -k 1 >> temp.tmp cat temp.tmp rm -f temp.tmp Dla was poprawienie tego to pewnie kilka minut a mi bardzo pomoze,a gory dziekuje Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dondexterro Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 w tej linijce dodaj awk -v licz=0 -F: ' $7~/\/'$iterpreter'$/ { licz+=1; } END {print "Razem "licz; }' /etc/passwd > temp.tmp o ile o to chodzilo ;D Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bigfan Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 (edytowane) #!/bin/bashif [ $# -ne "1" ]; then echo "Niewlasciwa liczba parametrow!!"; echo "Sposob uzycia `basename $0`: [interpreter]"; exit;fiif [ ! -e /bin/"$1" ]; then echo "Nie ma takiego interpretera"; exit;fishell=$1;echo "Razem:"; cat /etc/passwd | grep "$shell" | awk -F: '{print $1;}' | wc -lecho "Uzytkownicy:"; cat /etc/passwd | grep "$shell" | awk -F: '{print $1;}' | sort W zadaniu nie ma nic o tworzeniu plików, więc można to uprościć. Jeśli trzeba do plików zapisać to wystarczy przekierować wyjście poprzez operator ">>". Nie rozumiem zaś ostatniego zdania tego zadania. W tym przypadku można posortować jedynie alfabetycznie (chyba że coś przekręciłeś w treści polecenia). Edytowane 29 Maja 2005 przez bigfan Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dondexterro Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 hmm, przeczytalem jeszcze raz polecenie i tego ostatniego zdania takze nie rozumiem. nom teraz skrypt ma rece i nogi bigfan ;) pozwolilem sobie go jeszcze usprawnic #!/bin/bashif [ $# -ne "1" ]; then echo "Niewlasciwa liczba parametrow!!"; echo "Sposob uzycia `basename $0`: [interpreter]"; exit;fiif [ ! -e /bin/"$1" ]; then echo "Nie ma takiego interpretera"; exit;fishell=$1;ilosc=`cat /etc/passwd | grep "$shell" | awk -F: '{print $1;}' | wc -l`;if [ $ilosc = "0" ]; then echo "Nikt nie uzywa takiej powloki";else echo "Razem: $ilosc"; echo "Uzytkownicy:"; cat /etc/passwd | grep "$shell" | awk -F: '{print $1;}' | sortfi Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ParanoiK Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 Bez sensu. A jeśli jest /usr/local/bin/bash? Polecam plik /etc/shells ;] Poza tym po co wyskakiwać z awk które nie zawsze jest dostępne? Istnieje coś takiego jak 'cut' - w tym wypadku 'cut -f1 -d":"' ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bigfan Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 (edytowane) Słuszna uwaga z /etc/shells i cut, choć mało jest systemów bez awk. Całość będzie bardziej uniwersalna. Upał (przynajmniej ten wrocławski) daje się we znaki ;-) Edytowane 29 Maja 2005 przez bigfan Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
dondexterro Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 ha, nigdy wczesniej nie widzialem tego pliku /etc/shells mam w nim sh, bash, tcsh, csh, esh, ksh, zsh, sash, z tym ze: esh, ksh, zsh nie mam w ogole na kompie. wiec jednak u mnie lepiej sprawdziloby sie sprawdzanie w /bin + ew. /usr/local/bin my fault ? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ParanoiK Opublikowano 29 Maja 2005 Zgłoś Opublikowano 29 Maja 2005 to już lepiej find / -name "plik" ;] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bigfan Opublikowano 30 Maja 2005 Zgłoś Opublikowano 30 Maja 2005 W przypadku tego zadania w zupełności wystarczy zawartość /etc/shells. Uruchamianie find na / w przypadku dużej ilości danych może nieco negatywnie wpłynąć na szybkość działania skryptu. Poza tym myślę, że zadanie miało przede wszystkim nauczyć wykorzystania skryptów shellowych i paru dodatkowych poleceń w celu wyfiltrowania konkretnych informacji a nie wyszukiwania drobnych niuansów typu położenie plików wykonywalnych itp. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...