Bash I/O

A Complete Guide for Beginners Enroll Course Now

In Bash, input and output (I/O) operations are essential for interacting with the user, reading data from files, and writing data to files or other output destinations. Figuring out from where your input comes, what it looks like, and how to get your desired output from it are core requirements for almost all the shell scripts. Here, I will explain the fundamentals of Bash I/O with its generally discussed topics.

Fundamental Concepts

Understanding the origin of Bash input and the desired destination for Bash output is crucial in shell script programming. As it involves identifying where the input is sourced and examining its structure & characteristics. Also, determining the necessary steps or transformations required to produce the desired output.

Bash Input

In the context of Bash, input refers to the data or information that a program receives or reads. And when it comes to a bash script, inputs can originate from various sources:

  • Environment variables: These variables are inherited from the parent process that started the script & hold information that can be used in the execution of the scripts.
  • Command-line arguments: These are the values or options provided to the script when it’s executed. Generally, they are stored in the positional parameters.
  • Files: Inputs can be read from files. Scripts can read & extract relevant information from these files for further processing.
  • File Descriptors: A file descriptor is a system used to access various types of input sources, such as pipes, terminals, sockets, etc. These sources provide a way to receive input into the script.

Bash Output

Output refers to the information or data that a program generates or writes. And in the context of a Bash script, the output can be directed to different destinations:

  • Files: Output can be written to files for future reference or analysis.
  • File Descriptors: Same as input, outputs can be redirected to different file descriptors, enabling them to be sent to various destinations such as pipes, terminals, etc.
  • Command-line arguments: Outputs from a bash script can also be passed as arguments to another program. This enables the script to interact with other programs in a pipeline.
  • Environment variables: Output can be assigned to environment variables.

Topics Discussed in Bash I/O

Bash I/O covers a wide area of input and output operations. In the following part, I’ll try to discuss the generalized topics that fall under the Bash I/O operation with a short description:

Standard Input, Output & Error

Through standard input, output & error you get to control your script, like, from where it will read input, where it reads its output, and how it handles error messages.

1. Standard Input (stdin)

Bash provides a way to interactively read input from the user or from another command using standard input. This is normally done using the ‘read’ command, which allows you to assign input to variables for further processing in the script.

2. Standard Output (stdout)

Bash allows you to display output using standard output. By default, the output is displayed on the terminal. But you can also redirect the output to a file using the ‘>’ symbol or append it to a file using the ‘>>’ symbol. Moreover, you can also pipe the output of one command to another using the ‘|’ symbol.

3. Standard Error (stderr)

In addition to STDOUT, bash also provides a separate stream called standard error for handling error messages & diagnostic output. By default, STDERR is displayed on the terminal along with STDOUT. You can redirect STDERR to a file also using the ‘2>’ or ‘2>>’ symbols.

Check out the following graphical presentation of STDIN, STDOUT, and STDERR for a clearer concept:Standard input, output & error in BashIn Linux, everything is treated as a file, and input and output are no exception. The OS assigns identifiers called file descriptors to represent these files. Each process can have a maximum of nine open file descriptors. In the bash shell, the first three descriptors are reserved with specific ids. As in here,

  • 0 represents
  • 1 represents
  • 2 represents

Command Substitution

Command substitution allows capturing the output of a command and using it as part of another command or assigning it to a variable. There are two common syntaxes for command substitution in bash:

  • Using ‘($)’ notation: variable=$(command)
  • Using backticks (`): variable=`command`

In both cases, the ‘command’ is executed, and its output is stored & substituted into the command line.

Here are a few key notes to understand command substitution:

  • The `command` within the command substitution is executed in a subshell, meaning that any variable changes made within the substitution do not affect the parent shell.
  • Command substitution can be used as part of a command line or as an assignment to a variable.
  • The stored output can be used directly in a command or as an assignment within double quotes (“ ”).
  • If the output of the `command` contains whitespace, it means word splitting & may be treated as separate arguments.

I/O Arguments & Parameters

In Bash Scripting, arguments refer to the values passed to a Bash script or function when executed. In many scripts, the primary concern is the arguments received via the command line. And these arguments are referred to as positional parameters, forming a simple array of strings. Some important notes on these arguments & parameters are:

  • The first argument is denoted by as $1, the second as $2, and so on. To access arguments beyond the 9th position, curly braces are required (g. ${10},${11}).
  • To reference all the positional parameters together, the “$@” substitution is used, & it’s crucial to enclose it in double quotes.

File I/O

File I/O refers to the operations performed on files, such as reading data from files and writing data to files. In Bash, file I/O is a fundamental concept for working with data stored in files. Here’s a general list you need to know about file I/O in bash:

Opening and Closing Files

To perform file I/O operations, you can open a file using the “exec” command or by redirection input/output streams with symbols as ‘<’, ‘>’, ‘>>’, and ‘2>’.

Reading From Files

Bash provides several ways to read data from files. Such as,

  • Using the “read” command.
  • Using the “cat” command.
  • Using input redirection (‘<’).

Writing to FIles

Bash offers multiple methods for writing data to files:

  • Using the “echo” command to write text or variables to a file.
  • Using output direction (‘>’), to overwrite a file.
  • Using output direction append mode (‘>>’), to append data on an existing file.
  • Using the “printf” command.

File Descriptors

Bash uses file descriptors to handle file I/O The STDIN, STDOUT, and STDERR streams are assigned file descriptors 0,1, and 2 respectively.

File Manipulation

Bash provides various commands for manipulating files:

  • mv: Move or rename files.
  • cp: Copy files.
  • rm: Remove files.
  • mkdir: Create directories.
  • rmdir: Remove directories.

File Testing

Several file-testing operators allow you to check various properties of files, such as existence, size, type, permissions, etc.


In Bash, the fundamental method for manipulating input and output is through redirection. Redirection allows you to alter the source or destination of a program’s file descriptors. With redirection, you can redirect output to a file instead of displaying it on the terminal, or instruct an application to read input from a file rather than the keyboard.

Redirections are executed by the Bash shell before running the command to which the redirections are applied.


With redirection, you can write output to files or read input from flies. However, what if you desire to connect the output of one application directly to the input of another? That’s when you use pipelines. They are also known as FIFOs (First in, First Out), which are special files that provide a way for inter-process communication. They allow two or more processes to communicate by reading from and writing to the same file, acting as a pipe.

Importance of I/O in Bash Scripting

  • Interacting with users: Creating interactive scripts, that enhance the usability & interactivity of your applications.
  • Data processing: Bash I/O is necessary for processing & manipulating data.
  • Automation and scripting tasks: Creating automation scripts with customized settings.
  • Interaction with other programs: Designing menu-driven programs that let users perform actions based on their selections.
  • Error handling: Bash I/O is crucial for handling errors and displaying informative messages to users.


To sum up, in Bash, interacting with users through the manipulation of input-output is a mandatory task. Throughout this discussion, I tried to talk about the fundamentals of Bash I/O and the generalized topics that Bash I/O discusses, with a short description. Hope this helps you with your journey with shell scripting!

People Also Ask

What is the use of bash command?
Bash is used by people when they want to control their operating system without navigating menus, options, and windows within a GUI. They prefer to access their OS more efficiently using CLI, like Bash. As it’s much more convenient to automate tasks, data processing, analyzing, & being a cyber security expert.

How do I turn off output in bash?
To turn off the output in Bash you can redirect the output steam to a null device. A null device is a special file device that discards any messages written into it. You can redirect both the standard output & standard errors to the null device using the syntax, “command > /dev/null 2>&1”.

What are the 3 standard streams in Linux?
In Linux, the Bash shell has three standard streams of input-output redirection. These are Standard Input or STDIN, Standard Output or STDOUT, and Standard Error or STDERR.

Why is IO redirection useful?
Bash I/O redirection is an essential task in Bash scripting as it allows you to alter the source or destination of a program’s file descriptors. Using redirection, you can redirect output to a file instead of displaying it on the terminal, or instruct an application to read input from a file rather than the keyboard.

Related Articles

<< Go Back to Bash Scripting Tutorial

Rate this post
Md. Ashakul Islam Sowad

Hi, I am Md. Ashakul Islam Sowad from Dhaka, Bangladesh. I have completed my undergraduate degree in Biomedical Engineering from the Bangladesh University of Engineering and Technology (BUET). I love to watch football and play video games in my free time. Here, I am working as a Linux Content Developer Executive. Furthermore, as a Linux enthusiast, I am always learning new things about Linux-based systems and I’ll be sharing them here. Read Full Bio

Leave a Comment