Re: Problem w skrypcie bash/sed/awk.
On Thu, Mar 12, 2009 at 07:05:38PM +0100, bartek szurgot wrote:
>>> #!/bin/bash
>>> cat /etc/passwd | \
>>> while read line
>>> do
>>> C_USRNAME="`awk -F: '{print $1}' <<< "$line"`"
>>> C_UID="` awk -F: '{print $3}' <<< "$line"`"
>>> C_HOMEDIR="`awk -F: '{print $6}' <<< "$line"`"
>>> C_LSHELL="` awk -F: '{print $7}' <<< "$line"`"
>>> C_COMMENT="`awk -F: '{print $5}' <<< "$line"`"
>>> #C_PASSWORD=`egrep "^$C_USRNAME" /etc/shadow | cut -d: -f2`
>>> echo useradd -u "$C_UID" -m -d "$C_HOMEDIR" -s "$C_SHELL" -c
>>> "$C_COMMENT" -p "$C_PASSWORD" $C_USRNAME
>>> done
>>> exit 0
>>
>> 1. Martwy kot. Właściwiej byłoby:
>> while read line; do
>> [...]
>> done < /etc/passwd
> mozna i tak.
Martwy kot jest niepotrzebnym mnożeniem procesów i dlatego jest "błędem
stylistycznym" ;->
>> 2. Jakoś wcześniej to zupełnie zignorowałem - bez sensu tu jeszcze awka
>> wrzucać. Trzeba po prostu IFS odpowiedni ustawić i dać readowi zrobić co
>> trzeba.
> tez na poczatq o tym myslalem - problem bedzie, jak pojawia Ci sie
> spacje w linii (awk "zlapie" jak trzeba, ale read juz nie). napisz
> dokladnie jakie Ty to widisz, bo moze nie myslimy o tym samym.
No jak awk nie złapie? Dlatego właśnie piszę o ustawieniu IFS.
~$ IFS=:
~$ head /etc/passwd | while read MY_LOGIN MY_PASS MY_UID MY_GID MY_COMMENT MY_HOME MY_SHELL; do echo $MY_LOGIN; done
root
daemon
bin
sys
sync
games
man
lp
mail
news
>> Źle stosuj'esz apostrof'y.
> ciesze sie, iz mimo wszystko udalo Ci sie rozczytac. ;)
Staram się ;->
A poważnie - to popularny ostatnio błąd.
Apostrofu używa się do tego:
http://so.pwn.pl/zasady.php?id=629619
--
[------------------------] The page just created is more than 18 feet
[ Kruk@epsilon.eu.org ] tall or more than 18 feet wide, so I suspect
[ http://epsilon.eu.org/ ] something went wrong.(TeX)
[------------------------]
Reply to: