Zachowując oryginalny interfejs:
#!/usr/bin/env bash
(( $# )) || exit 1
awk -F : -v uid="$1" '
$3 == uid {
print $5 ? $5 : "Brak opisu"
exit
}
' /etc/passwd
Można to zrobić w czystym Bashu. Najtrudniejsza część nie wygląda tak strasznie:
...
while IFS=: read -r _ _ uid _ gecos _; do
...
done </etc/passwd
Dwie uwagi:
- Idiomatycznie program powinien zwracać status
2
, jeżeli jego użycie jest niepoprawne (nieznana opcja, niepoprawna liczba argumentów, itp.):
$ grep -x
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
$ echo $?
2
$ curl -x
curl: option -x: requires parameter
curl: try 'curl --help' or 'curl --manual' for more information
$ echo $?
2
$ printf
printf: usage: printf [-v var] format [arguments]
$ echo $?
2
-
grep(1)
zwraca status 1
, jeżeli nie uda mu się odnaleźć pasującej linii:
$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
$ echo $?
0
$ grep doot /etc/passwd
$ echo $?
1
$
Może Twój program powinien informować o niepowodzeniu w podobny sposób?