shell中处理或/并扩展变量(一)

1、处理或/并扩展变量
1) p a r a m e t e r 和 {parameter} 和 parameterparameter是相同的,都是表示变量parameter的值。在一些环境中,使用${parameter}比较不会引起误解.
可以把变量和字符串连接.

your_id=${USER}-on-${HOSTNAME}
echo "$your_id"

echo "Old \$PATH = $PATH"

PATH=${PATH}:/opt/bin # 在脚本的生存期内,能额外增加路径/opt/bin到环境变量$PATH中去.
echo "New \$PATH = $PATH"

在这里插入图片描述
2)${parameter-default}, ${parameter:-default}
如果变量没有被设置,使用默认值。

#!/bin/bash
# parameter-default.sh

echo ${username-`whoami`} # 没有设置则使用默认值

username=
echo ${username-`whoami`} # 设置了则使用username,即使设置的值为null

username=jusine
echo ${username-`whoami`}

在这里插入图片描述
p a r a m e t e r − d e f a u l t 和 {parameter-default}和 parameterdefault{parameter:-default}几乎是相等的。它们之间的差别是:当一个参数已被声明,但是值是NULL的时候两者不同.

#!/bin/bash
# param-sub.sh

#  变量是否被声明
#+ 即使它的值是空的(null)
#+ 也会影响是否使用默认值.

username0=
echo "username0 has been declared,but is set to null."
echo "username0 = ${username0-`whoami`}"
# 声明了,即使为null,不使用默认值,没有输出

echo

username2=
echo "username2 has been declared,but is set to null."
echo "username2 = ${username2:-`whoami`}"
# 声明了,但是为null的时候会使用默认值

echo

echo username3 has not been declared.
echo "username3 = ${username3-`whoami`}"
# 未声明,输出默认值

echo

echo "username3 = ${username3:-`whoami`}"
# 未声明,输出默认值

echo

variable=
# 变量已声明,但被设置了空值(null).
echo "${variable-0}"  # (没有输出)
echo "${variable:-1}" # 1

unset variable

# 未声明则都使用默认值
echo "${variable-2}"  #2
echo "${variable:-3}" #3

exit 0

shell中处理或/并扩展变量(一)_第1张图片

默认值结构可以在脚本中提供一个没有传递命令行参数时的默认值.

#!/bin/bash
# default_filename.sh

DEFAULT_FILENAME=generic.data
filename=${1:-$DEFAULT_FILENAME}
# 如果执行这个文件时,没有传递参数值,则会使用DEFAULT_FILENAME
echo $filename

在这里插入图片描述

3)${parameter=default}, p a r a m e t e r : = d e f a u l t 如果变量 p a r a m e t e r 没有设置,把它设置成默认值 . 两种形式几乎相同,只是和上面的一样:只有当 {parameter:=default} 如果变量parameter没有设置,把它设置成默认值. 两种形式几乎相同,只是和上面的一样:只有当 parameter:=default如果变量parameter没有设置,把它设置成默认值.两种形式几乎相同,只是和上面的一样:只有当parameter变量被声明且被设置成null值时不同.

#!/bin/bash

echo ${username=`whoami`}
echo ${username:=`whoami`}
# username未声明,则使用默认值

username=
echo ${username=`whoami`}
# username声明,但为null,不使用默认值
echo ${username:=`whoami`}
# username声明,但为null,使用默认值

username=jusine
echo ${username=`whoami`}
echo ${username:=`whoami`}

shell中处理或/并扩展变量(一)_第2张图片
4)${parameter+alt_value}, ${parameter:+alt_value}
如果变量parameter设置,使用alt_value作为新值,否则使用空字符串。

除了引起的当变量被声明且值是空值时有些不同外,两种形式几乎相等。请看下面的例子.

#!/bin/bash
# para-add.sh

a=${param1+xyz}
echo "a = $a" # a =

param2=
a=${param2+xyz}
echo "a = $a" # a = xyz

param3=123
a=${param3+xyz}
echo "a = $a" # a = xyz

a=${param4:+xyz}
echo "a = $a" # a =

param5=
a=${param5:+xyz}
echo "a = $a" # a =

param6=123
a=${param6+xyz}
echo "a = $a" # a = xyz

shell中处理或/并扩展变量(一)_第3张图片5)${parameter?err_msg}, ${parameter:?err_msg}
如果变量parameter已经设置,则使用该值,否则打印err_msg错误信息。
这两种形式几乎相同,仅有和上面所说的一点不同:带有:使当变量已声明但值是空值时不同.

#!/bin/bash
# parameter-msg.sh

# 检查一些系统环境变量
# 这是很好的预防性防护
# 例如,如果$USER(用户在控制台的名字)没有被设置
#+ 系统将不接受你

: ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?}

# 如果以上任意一个变量没有被设置,都会输出错误消息并退出

echo
echo "Name of the machine is $HOSTNAME."
echo "You are $USER."
echo "Your home directory is $HOME."
echo "Your mail INBOX is located in $MAIL."
echo
echo "If you are reading this message,"
echo "critical environmental variables have been set."
echo
echo
# ----------------------------------------------------

# ${variablename?}结构也能检查一个脚本中变量的设置情况
#

ThisVariable=Value-of-ThisVariable

# 注意,顺便说一下字符串变量可能被设置成不允许的字符
#
: ${ThisVariable?}
echo "Value of ThisVariable is $ThisVariable."
echo
echo

: ${ZZXy23AB?"ZZXy23AB has not been set."}
# 如果变量ZZXy23AB没有被设置
#+ 则脚本会打印一个错误信息而结束

# 你可以指定错误信息
# : ${variablename?"ERROR MESSAGE"}

# 等同于: dummy_variable=${ZZXy23AB?} 
#          dummy_variable=${ZZXy23AB?"ZXy23AB has not been set."}
#          
#          echo ${ZZXy23AB?} > /dev/null
#

# 使用命令"set -u"后,再比较这些检查变量是否被设置的方法的不同...
#

echo "You will not see this message,because script already terminated."

HERE=0
exit $HERE # 不会执行到这儿

# 实际上,这个脚本会返回退出状态码1(echo $?).

![在这里插入图片描述](https://img-blog.csdnimg.cn/b077363f91bb48dcb1d7e21835321794.png

#!/bin/bash
# parameter-usage.sh

: ${1?"Usage: $0 ARGUMENT"}
# 如果没有提供命令行参数则脚本在这就退出了,
#+ 并打印了错误信息.
# parameter-usage.sh:1:Usage: parameter-usage.sh ARGUMENT

echo "These two lines echo only if command-line parameter given."
echo "command line parameter =\"$1\""

exit 0 # 仅在命令行参数提供时,才会在这儿退出

# 分别检查有命令行参数和没有命令行参数时的退出状态。
# 如果有命令行参数,则"$?"为0.
# 否则,"$?"为1.

在这里插入图片描述

你可能感兴趣的:(学习,服务器,linux,centos,运维)