变量和参数

2017-10-14  本文已影响8人  rochestor

变量名是其所指向值的一个占位符(placeholder)。引用变量值的过程我们称之为变量替换(variable substitution)

变量替换

$variable 这种写法是 ${variable} 的简化形式。在某些特殊情况下,使用 $variable 写法会造成语法错误,使用完整形式会更好

# 初始化变量时,赋值号 = 的两侧绝不允许有空格出现。
VARIABLE =value
# 脚本将会尝试运行带参数 "=value" 的 "VARIABLE " 命令
# 脚本将会尝试运行 "value" 命令
# 同时设置环境变量 "VARIABLE" 为 ""

hello="A B  C   D"
echo $hello   # A B C D
echo "$hello" # A B  C   D
# 正如我们所见,echo $hello 与 echo "$hello" 的结果不同。
# ====================================
# 字符串内引用变量将会保留变量的空白符。
# ====================================


#一个未被赋值或未初始化的变量拥有空值(null value)。注意:null值不等同于0。
if [ -z "$unassigned" ]
then
  echo "\$unassigned is NULL."
fi     # $unassigned is NULL.

变量赋值 【 "=" 前后不能有空格】

a=879
echo "The value of \"a\" is $a."

# 在 'for' 循环中赋值(隐式赋值)
echo -n "Values of \"a\" in the loop are: "
for a in 7 8 9 11
do
  echo -n "$a "
done

# 酷炫的赋值
a=`echo Hello!`   # 将 'echo' 命令的结果赋值给 'a'
a=$(echo Hello!)
# 注意在命令替换结构中包含感叹号(!)在命令行中使用将会失效,
# 因为它将会触发 Bash 的历史(history)机制。

bash变量是弱类型的

本质上说,Bash 变量是字符串,但在某些情况下,Bash 允许对变量进行算术运算和比较。决定因素则是变量值是否只含有数字
为了减轻脚本持续跟踪变量类型的负担,Bash 不允许变量声明

# 在执行算术运算时,Bash 通常将其空值的整数值设为0, 但是不要做这种事情
e=''                         # ...也可以是 e="" 或 e=
echo "e = $e"         # e =
let "e += 1"             # 空值是否允许进行算术运算?
echo "e = $e"         # e = 1

特殊的变量类型

局部变量

仅在代码块或函数中才可见的变量

环境变量

会影响用户及shell行为的变量

每当shell启动时,都会创建出与其环境对应的shell环境变量。改变或增加shell环境变量会使shell更新其自身的环境。子进程(由父进程执行产生)会继承父进程的环境变量

如果在脚本中设置了环境变量,那么这些环境变量需要被“导出”,也就是通知脚本所在的环境做出相应的更新。这个“导出”操作就是 export 命令

位置参数

$0, $1, $2, $3 ... 即命令行参数, 在 $9 之后的参数必须被包含在大括号中,如 ${10}, ${11}, ${12}

if [ -n "$1" ]              # 测试变量是否存在
then
 echo "Parameter #1 is $1"  # 使用引号转义#
fi


if [ $# -lt "$MINPARAMS" ]
then
  echo
  echo "This script needs at least $MINPARAMS command-line arguments!"
fi

# 通过 {} 获取最后一个参数
args=$#           # 传入参数的个数
lastarg=${!args}
# 这是 $args 的一种间接引用方式
也可以使用:       lastarg=${!#}

# shift 命令可以将全体位置参数向左移一位, 重新赋值, $1 <--- $2, $2 <--- $3, $3 <--- $4,以此类推

# 原先的 $1 将会消失,而 $0(脚本名称)不会有任何改变。如果你在脚本中使用了大量的位置参数,shift 可以让你不使用{大括号}助记法也可以访问超过10个的位置参数

until [ -z "$1" ]  # 直到访问完所有的参数
do
  echo -n "$1 "
  shift
done

唯爱与技术不可辜负

上一篇 下一篇

猜你喜欢

热点阅读