---
name: "getusershell"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/endusershell"
---

# getusershell(3)

get valid user shells

Part of [endusershell(3)](/endusershell/3.md).

## NAME

**getusershell**, **setusershell**, **endusershell** – get valid user shells

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<unistd.h\>**

*char* *\**\

**getusershell**(*void*);

*void*\

**setusershell**(*void*);

*void*\

**endusershell**(*void*);

## DESCRIPTION

The **getusershell**() function returns a pointer to a valid user shell as defined by the system manager in the shells database as described in [shells(5)](/shells/5.md). If the shells database is not available, **getusershell**() behaves as if */bin/sh* and */bin/csh* were listed.

The **getusershell**() function reads the next line (opening the file if necessary); **setusershell**() rewinds the file; **endusershell**() closes it.

## FILES

- */etc/shells*

  ## DIAGNOSTICS

The routine **getusershell**() returns a null pointer (0) on EOF.

## SEE ALSO

[nsswitch.conf(5)](/nsswitch.conf/5.md), [shells(5)](/shells/5.md)

## HISTORY

The **getusershell**() function appeared in 4.3BSD.

## BUGS

The **getusershell**() function leaves its result in an internal static object and returns a pointer to that object. Subsequent calls to **getusershell**() will modify the same object.
