sh
POSIX-compliant command interpreter
TLDR
SYNOPSIS
sh [-aCefimnsuvx] [script [argument...]]
DESCRIPTION
sh is the POSIX-compliant command interpreter (shell). It provides the standard shell scripting environment and is guaranteed to be available on all Unix-like systems.On many Linux systems, /bin/sh is a symbolic link to another shell (dash, bash, etc.) running in POSIX-compatibility mode. This provides both compatibility and performance benefits.Shell scripts beginning with #!/bin/sh use POSIX sh, ensuring maximum portability. Scripts needing bash-specific features should use #!/bin/bash instead.The shell reads commands from standard input, a file, or the -c argument. It supports variables, control flow (if, while, for, case), functions, pipelines, and I/O redirection.
PARAMETERS
-a
Export all variables that are modified or created to the environment-C
Prevent output redirection from overwriting existing files (noclobber)-c string
Execute commands from string-e
Exit immediately if a command exits with non-zero status-f
Disable filename globbing (wildcard expansion)-i
Interactive shell-m
Enable job control (default for interactive shells)-n
Read commands but do not execute (syntax check)-s
Read commands from standard input-u
Treat unset variables as an error-v
Print shell input lines as they are read-x
Print commands and arguments as they are executed+option
Turn off option
CONFIGURATION
~/.profile
Per-user login shell initialization file, executed for login shells./etc/profile
System-wide login shell initialization file, executed before ~/.profile.ENV
Environment variable pointing to a file executed at interactive shell startup.
POSIX FEATURES
Variables: NAME=value, $NAME, ${NAME}Quoting: 'literal', "interpolated", \escapeConditionals: if-then-elif-else-fi, case-esacLoops: while-do-done, for-in-do-done, until-do-doneFunctions: name() { commands; }Tests: [ condition ], test conditionArithmetic: $((expression))
CAVEATS
POSIX sh lacks many bash features: arrays, [[ ]], brace expansion, process substitution, many string manipulations. Write portable scripts or explicitly require bash.The -e option can cause unexpected exits. Commands in conditions (if, while) or with || / && don't trigger exit on failure.Different systems link /bin/sh to different implementations (dash, bash, ksh). Test scripts on target systems or use explicit interpreters.
