[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Problem w skrypcie bash/sed/awk.



Witam wszystkich. Jako początkujący twórca skryptów natrafiłem na problem. Tworzę skrypt tworzący konta na podstawie pliku /etc/passwd z innego hosta. Teoretycznie chciałem umieścić wszystkie odpowiednie ($5 ~ /WZÓR$/)linijki wspomnianego /etc/passwd w zmiennej SUSERS:
SUSERS=`awk -F: '$5 ~ /WZÓR$/{print}' ./passwd`
Następnie za pomocą pętli for chciałem dla każdej linijki (wpisu ze starego /etc/passwd) otrzymywać odpowiednie wartości pól i dodawać nowego użytkownika:
for $i in $SUSERS
        do
               USRNAME=`awk -F: '{print $1}' $i`
               UID=`awk -F: '{print $3}' $i`
               HOMEDIR=`awk -F: '{print $6}' $i`
               LSHELL=`awk -F: '{print $7}' $i`
               COMMENT=`awk -F: '{print $5}' $i`
               PASSWORD=`egrep "^$USRNAME" .shadow | cut -d: -f2`
               useradd -u $UID -m -d $HOMEDIR -s $SHELL -c \'$COMMENT\' -p $PASSWORD $USRNAME
        done

Niestety zmienna SUSERS zawiera jedną linijkę składającą się ze wszystkich linii starego /etc/passwd oddzielonych spacjami i moja metoda nie działa. Czy moglibyście doradzić jakieś inne podejście do problemu? Może zmienna SUSERS powinna być tablicą => jak wówczas zmodyfikować zmienną i pętlę for? Może awk ma taką funkcjonalność by dla każdej linijki, która w 5. polu ma WZÓR wykonywać komendę (w tym przypadku) useradd z parametrami odpowiadającymi poszczególnym polom z aktualnie przetwarzanej linii ($1,$2...)? Pytanie dla niektórych pewnie proste, zaczynam jednak dopiero przygodę ze skryptami w bash-u, wszelka pomoc więc będzie bardzo miło widziana.

Pozdrawiam,
R.

Reply to: