Difference between revisions of "Command substitution"

From Linux Shell Scripting Tutorial - A Beginner's handbook
Jump to navigation Jump to search
(Created page with ' Category:Control flow loop')
 
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 +
{{navigation
 +
|previous=Continue statement|Using the continue statement
 +
|next=Chapter 5 Challenges}}
  
[[Category:Control flow loop]]
+
Command substitution means nothing more but to run a shell command and store its output to a variable or display back using [[echo command]]. For example, display date and time:
 +
<syntaxhighlight lang="bash" >echo "Today is $(date)"</syntaxhighlight>
 +
OR
 +
<syntaxhighlight lang="bash" >echo "Computer name is $(hostname)"</syntaxhighlight>
 +
==Syntax==
 +
You can use the grave accent (`) to perform a command substitution. The syntax is:
 +
<pre>`command-name`</pre>
 +
OR
 +
<pre>$(command-name)</pre>
 +
===Command substitution in an echo command===
 +
<syntaxhighlight lang="bash" >echo "Text $(command-name)"</syntaxhighlight>
 +
OR
 +
<syntaxhighlight lang="bash" > echo -e "List of logged on users and what they are doing:\n $(w)"</syntaxhighlight>
 +
Sample outputs:
 +
<pre>List of logged on users and what they are doing:
 +
  09:49:06 up  4:09,  3 users,  load average: 0.34, 0.33, 0.28
 +
USER    TTY      FROM              LOGIN@  IDLE  JCPU  PCPU WHAT
 +
vivek    tty7    :0              05:40    ?    9:06m  0.09s /usr/bin/gnome-
 +
vivek    pts/0    :0.0            07:02    0.00s  2:07m  0.13s bash
 +
vivek    pts/2    :0.0            09:03  20:46m  0.04s  0.00s /bin/bash ./ssl
 +
</pre>
 +
===Command substitution and shell variables===
 +
You can store command output to a shell variable using the following syntax:
 +
<pre>var=$(command-name)</pre>
 +
Store current date and time to a variable called NOW:
 +
<syntaxhighlight lang="bash" >NOW=$(date)
 +
echo "$NOW"</syntaxhighlight>
 +
Store  system's host name to a variable called SERVERNAME:
 +
<syntaxhighlight lang="bash" >SERVERNAME=$(hostname)
 +
echo "Running command @ $SERVERNAME...."</syntaxhighlight>
 +
Store current working directory name to a variable called CWD:
 +
<syntaxhighlight lang="bash" >CWD=$(pwd)
 +
cd /path/some/where/else
 +
echo "Current dir $(pwd) and now going back to old dir .."
 +
cd $CWD</syntaxhighlight>
 +
 
 +
===Command substitution and shell loops===
 +
Shell loop can use command substitution to get input:
 +
<syntaxhighlight lang="bash" >for f in $(ls /etc/*.conf)
 +
do
 +
  echo "$f"
 +
done</syntaxhighlight>
 +
However, a recommend syntax is as follows for file selections:
 +
<syntaxhighlight lang="bash" >for f in /etc/*.conf
 +
do
 +
  echo "$f"
 +
done</syntaxhighlight>
 +
[[Category:Control flow loop]][[Category:Commands]]
 +
{{navigation
 +
|previous=Continue statement|Using the continue statement
 +
|next=Chapter 5 Challenges}}

Latest revision as of 22:50, 29 March 2016

← Continue statementHomeChapter 5 Challenges →

Command substitution means nothing more but to run a shell command and store its output to a variable or display back using echo command. For example, display date and time:

echo "Today is $(date)"

OR

echo "Computer name is $(hostname)"

Syntax

You can use the grave accent (`) to perform a command substitution. The syntax is:

`command-name`

OR

$(command-name)

Command substitution in an echo command

echo "Text $(command-name)"

OR

 echo -e "List of logged on users and what they are doing:\n $(w)"

Sample outputs:

List of logged on users and what they are doing:
  09:49:06 up  4:09,  3 users,  load average: 0.34, 0.33, 0.28
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
vivek    tty7     :0               05:40     ?     9:06m  0.09s /usr/bin/gnome-
vivek    pts/0    :0.0             07:02    0.00s  2:07m  0.13s bash
vivek    pts/2    :0.0             09:03   20:46m  0.04s  0.00s /bin/bash ./ssl

Command substitution and shell variables

You can store command output to a shell variable using the following syntax:

var=$(command-name)

Store current date and time to a variable called NOW:

NOW=$(date)
echo "$NOW"

Store system's host name to a variable called SERVERNAME:

SERVERNAME=$(hostname)
echo "Running command @ $SERVERNAME...."

Store current working directory name to a variable called CWD:

CWD=$(pwd)
cd /path/some/where/else
echo "Current dir $(pwd) and now going back to old dir .."
cd $CWD

Command substitution and shell loops

Shell loop can use command substitution to get input:

for f in $(ls /etc/*.conf)
do
   echo "$f"
done

However, a recommend syntax is as follows for file selections:

for f in /etc/*.conf
do
   echo "$f"
done

← Continue statementHomeChapter 5 Challenges →