#!/bin/bash process_u() { if [ ! -z "${2##*[!0-9]*}" ]; then # Single shared static ID. echo "user($1) = $2" echo "group($1) = $2" elif [[ $2 == *:* ]]; then # UID:. uid=$(echo $2 | cut -d':' -f1 -) group=$(echo $2 | cut -d':' -f2 -) if [ ! -z "${group##*[!0-9]*}" ]; then # UID:GID. echo "user($1) = ${uid}" echo "group($1) = ${group}" else # UID:. echo "user($1) = ${uid}" echo "group(${group})" fi else # Dynamic (or something else uninteresting). echo "user($1)" echo "group($1)" fi } process_g() { if [ ! -z "${2##*[!0-9]*}" ]; then # Static GID. echo "group($1) = $2" else # Dynamic (or something else uninteresting). echo "group($1)" fi } parse() { while read line; do [ "${line:0:1}" = '#' -o "${line:0:1}" = ';' ] && continue line="${line## *}" [ -z "$line" ] && continue set -- $line case "$1" in ('u') process_u "$2" "$3" ;; ('g') process_g "$2" "$3" ;; ('m') echo "user($2)" echo "group($3)" ;; esac done } while read fn; do parse < "$fn" done