Skocz do zawartości

Skrypt W Bashu


faja

Rekomendowane odpowiedzi

witam, mam napisac 2 skrypty w bashu:

1. wyswietla posortowanych uzytkownikow z /etc/passwd wraz z UID i GID oraz z nazwa grupy do ktorej nalezy pobranej z /etc/group

2. wysiwtlajacynazwe powloki wystepujacej w /etc/passwd i wyswietlajacy ilu uzytkownikom ta powloka jest przypisana

prosze o jakies podpowiedzi

Odnośnik do komentarza
Udostępnij na innych stronach

okej okej;] ..spokojnie nie chce by nikt za mnie tego pisal ..potrzebuje malych podpowiedzi, moze tak ..

cat /etc/passwd | cut -f 1 -d : | sort

wynikiem beda nazwy uzytkownikow, da sie utworzyc TABLICE z tymi nazwami, tak by kazdy element tablicy to byl uzytkownik?

..albo jak wyswietlic tylko 10 wiersz? ..bo pierwszy wiem;]

cat /etc/passwd | cut -f 1 -d : | sort | head -1

a jak kazdy z osobna??

Odnośnik do komentarza
Udostępnij na innych stronach

A musi być czysty bash? Nie możesz skorzystać z awk, sed lub innego dostarczanego z systemem narzędzia?

[EDIT]Tak byłoby prościej ;) A odpowiadając wprost na Twoje pytanie: tak, można zrobić tablice w bash'u, ale tylko jednowymiarowe.

Sądzę, że prościej jest tu użyć kombinacji poleceń head, tail oraz ew. wc żeby zliczyć linie i widzieć jakie parametry przekazać do 2 pierwszych poleceń

Odnośnik do komentarza
Udostępnij na innych stronach

moze byc awk lub inne takie tam;) ..ale wpierw chcialem to zrobic samym bashem

 

co do tablic to wiem ze mozna tworzyc:) ..ale nie wiem jak zrobic zeby za pomoca polecenie (lub innego)

cat /etc/passwd | cut -f 1 -d :

ktore wyswietla nazwy uzytkowinkow, wpisac do tablicy do kolejnych jej elementow kolejne nazwy uzytkownikow, bo

uzytkownicy_tablica=`cat /etc/passwd | cut -f 1 -d :`

utworzy pojedyncza zmienna;/

dlatego kombinuje zeby zrobic petelke i wpisywac pokolei sobie uzytkownikow (czyli pokolei wszystkie linie) ale do tego musze wiedziec jak wyswietlic pojedyncze linie :)

wiec : jak headem wyswietlic sama druga linie? (albo cat'em albo less'em albo czymkolwiek innym;])

 

dzieki za pomoc:)

 

[EDIT]

dobra dokopalem sie do takiego czegos

 cat /etc/paswd | cut -f1 -d : | while read linia
do 
echo $linia # i tu sie ladnie wyswietlaja pokolei
done
echo $linia # poza petla zmienna linia jest pusta;/

ladnie sie zapisuje do zmiennej linia, ale poza petla zmienna ta jest pust;/ why?, jak zrobic by tak nie bylo?;]

tedy wsrodku petli moglbym sobie zrobic zapis do tablicy i bylo by git;]

tablica=$linia

i=$((i+1)

Odnośnik do komentarza
Udostępnij na innych stronach

Chcesz 10. linię? Każdy "łeb" ma swój "ogonek" ;)

head -10 plik | tail -1

Dalej kombinuj sam ;)

 

[EDIT]A np. ostatnia linia:

cat plik | head -`wc -l plik` | tail -1

Przy wc opcja jest -l (L jak Lucjan), przy tail to cyfra.

Odnośnik do komentarza
Udostępnij na innych stronach

dzieki;) w wolnej chwili na pewno zajze

a to moje wypociny (troszke z pomoca innego forum:) :

#!/bin/bash
#########user + group
cat /etc/passwd | sort | while read linepasswd
do
   user=$(echo $linepasswd | cut -f 1 -d : )
   uid=$(echo $linepasswd | cut -f 3 -d : )
   gid=$(echo $linepasswd | cut -f 4 -d : )

   group=$( cat /etc/group | grep :$gid: | cut -f 1 -d : )

echo "USER = $user ::: UID = $uid ::: GID = $gid ::: GROUP = $group"
done

######### powloki
cat /etc/passwd | sort | while read linepasswd
do
   user=$(echo $linepasswd | cut -f 1 -d : )
   shell=$(echo $linepasswd | cut -f 7 -d : )

if  [ "$shell" == "" ]
then
   echo ""
   echo "User = $user nie ma przypisanej zadnej powloki"
else
   ile=$( cat /etc/passwd | grep $shell | wc -l )
   echo ""
   echo "User = $user uzywa powloki = $shell"
   echo "tej powloki uzywa jeszcze : $ile innych uzytkownikow"
fi
done

Odnośnik do komentarza
Udostępnij na innych stronach

..a takie jeszcze zadanko, mamy tablice tablica=( a a b a c a c b ), sklada sie ona z trzech rodzajow elementow,

jak dowiedziec sie ile jest roznych rodzajow elementow i ile jest elementow kazdego rodzaju, czyli miej wiecej chce otrzymac cos takiego (biorac ta tablice z przykladu):

tablica o nazwie "tablica" zawiera 3 rodzaje elementow:

a : wystepuje 4 razy

b : wystepuje 2 razy

c : wystepuje 2 razy

Odnośnik do komentarza
Udostępnij na innych stronach

yeah..poradzilem sobie;] ..dzieki wszystkim za pomoc

#!/bin/bash
ile=`cat /etc/passwd | cut -f7 -d : | sort | uniq | wc -l`
i=1
while [ $i -le $ile ]
do
shell=`cat /etc/passwd | cut -f7 -d : | sort | uniq | head -$i | tail -1`

   if [ "$shell" != "" ]
   then
       ile_shell=`cat /etc/passwd | grep $shell | wc -l`
       echo "Powloka: $shell   jest uzywana przez $ile_shell uzytkownikow"
   else
       ile_shell=`cat /etc/passwd | cut -f7 -d :  | grep -v "/" | wc -l`
       echo "$ile_shell uzytkownikow nie ma przypisanej powloki"
   fi
i=$((i+1))
done

Odnośnik do komentarza
Udostępnij na innych stronach

Skoro jesteśmy przy skryptach, to mam taki problem (mógłbym poszukać ale nawet nie wiem czego).

Mam plik information.txt i w nim jest coś takiego:

package_name=binutils
package_ver=2.17
package_desc=opis

 

Chodzi o to żeby wyciągnąć wartości z pliku i żebym miał np. $pkg_name o wartości binutils

 

Próbowałem już tym cut ale on mi dzielił znaki = i nawet jak było w nowej lini to on mi wypisywał to, i wychodziło

binutils package_ver     2.17 package_desc       opis

 

Jeśli zrozumieliście (mam często problem z tłumaczeniem czegoś komuś ;)) to poddajcie mi jakieś rozwiązanie.

Z góry dzięki

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ę...