The $
character is used for parameter expansion, and command substitution. You can use it for manipulating and/or expanding variables on demands without using external commands such as sed or awk
.
# -----------------------------------------------------------------------------
# Bash: Assign Output of Shell Command To Variable
# http://www.cyberciti.biz/faq/unix-linux-bsd-appleosx-bash-assign-variable-command-output/
# -----------------------------------------------------------------------------
##
# 1: Getting Up Default Shell Variables Value
##
# SYNTAX:
${parameter:-defaultValue}
var=${parameter:-defaultValue}
# Consider the following example:
#!/bin/bash
_jail_dir="${1:-/home/phpcgi}"
echo "Setting php-cgi at ${_jail_dir}..."
# rest of the script ...
# You can now run this script as follows:
./script.sh /jail # <--- set php jail at /jail dir
./script.sh /home/httpd/jail # <---- set php jail at /home/httpd/jail dir
./script.sh # <--- set php jail dir at /home/phpcgi (default)
##
# 1.1: Setting Default Values
##
# SYNTAX:
${var:=value}
var=${USER:=value}
# The assignment (:=) operator is used to assign a value to the variable if
# it doesn't already have one. Try the following examples:
echo $USER
# outputs => vivek
# Now, assign a value foo to the $USER variable if doesn't already have one:
echo ${USER:=foo}
# outputs => vivek
# Unset value for $USER:
unset USER
echo ${USER:=foo}
# outputs => foo
##
# Tip: ${var:-defaultValue} vs ${var:=defaultValue}
###
# Please note that it will not work with positional
# (http://bash.cyberciti.biz/guide/How_to_use_positional_parameters)
# parameter arguments:
var=${1:=defaultValue} ### FAIL with an error cannot assign in this way
var=${1:-defaultValue} ### Perfect
##
# 2: Display an Error Message If $VAR Not Passed
##
# If the variable is not defined or not passed, you can stop executing the
# Bash script with the following syntax:
${varName?Error varName is not defined}
${varName:?Error varName is not defined or is empty}
${1:?"mkjail: Missing operand"}
# MESSAGE="Usage: mkjail.sh domainname IPv4" ### define error message
# _domain=${2?"Error: ${MESSAGE}"} ### you can use $MESSAGE too
# This is used for giving an error message for unset parameters.
# In this example, if the $1 command line arg is not passed, stop executing
# the script with an error message:
_domain="${1:?Usage: mknginxconf domainName}"
##
# Complete article here ...
# http://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html
##