@Mondviech: In dem Quelltext ist keine Schleife enthalten und einen boole'schen Wert gibt es da auch nicht wirklich. Das false ist eine Zeichenkette und die ist in diesem Kontext ”wahr”, was zu der verwirrenden Ausgabe von True führt. 😕
Hinter dem if muss etwas stehen was ausgeführt wird und dessen Rückgabecode dann verwendet wird um zu entscheiden welcher Zweig (then/else) ausgeführt wird. Bei einem Rückgabecode von 0 wird der then-Zweig ausgeführt, ansonsten der else-Zweig.
Bei Pipes ist der Rückgabewert der des letzten Programms. Du willst also als letztes in der Kette von Pipes ein Programm haben das 0 als Rückgabewert hat, wenn der Benutzer angemeldet ist, und einen anderen Rückgabewert wenn der Benutzer nicht angemeldet ist. Schau Dir einfach mal die Dokumentation von grep an, was das unter welchen Umständen als Rückgabewert hat (englisch „exit status“). Auch in Verbindung mit bestimmten Optionen, die Du für Deine Aufgabe sinnvoll nutzen kannst.
Edit: Jetzt hast Du den Beitrag geändert während ich die Antwort geschrieben habe. ☺
whoami ist nicht die Lösung zu der Ausgabe, denn das gibt ja nur den Namen des aktuellen Benutzers aus, der dieses Programm aufruft. Das muss ja nicht tobias sein, der könnte aber trotzdem angemeldet sein.