Část, která je ve vašem skriptu zjevně chybná, spočívá v tom, že očekává řádky následující za su - postgres být spuštěn jako uživatel postgres. To se nestane.
V dávkovém režimu su - postgres se spustí a okamžitě skončí, protože do něj není zadán žádný příkaz. Poté jsou provedeny další příkazy skriptů, když uživatel spouští skript (pravděpodobně root) a selžou.
Místo toho byste měli napsat něco takového:
su - postgres <<-'EOF'
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data/
/usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
/usr/local/pgsql/bin/createdb test
EOF
# the lines after the EOF will be executed again as the initial user
Návrhy v komentářích předpokládají, že jste postgresql nainstalovali prostřednictvím balíčku, ale to není kontext otázky. Při instalaci ze zdroje pomocí ./configure bez argumentů a make install , nikdy nenainstaluje nic mimo /usr/local/pgsql . Je naprosto normální nemít spouštěcí skript pod /etc v tomto kontextu.