局部变量
环境变量在代码块或函数中可见
分配给环境变量的空间是有限的. 创建太多环境变量, 或者给一个环境变量分配太多的空间都会引起错误。
如果一个脚本要设置一个环境变量, 那么需要将这些变量"export"出来, 也就是需要通知到脚本本地的环境。
位置参数
从命令行传递到脚本的参数: $0, $1, $2, $3 . . .
$0就是脚本文件自身的名字, $1 是第一个参数, $2是第二个参数, $3是第三个参数, $9之后的位置参数就必须用大括号括起来了, 比如, ${10}, ${11}, ${12}
两个比较特殊的变量$*和$@ 表示所有的位置参数
示例代码:
#! /bin/bash # location-var.sh # ./scriptname 1 2 3 4 5 6 7 8 9 10 MINPARAMS=10 echo echo "The name of this script is \"$0\"." echo "The name of this script is \"`basename $0`\"." echo if [ -n "$1" ] then echo "Parameter #1 is $1" fi if [ -n "$2" ] then echo "Parameter #2 is $2" fi if [ -n "${10}" ] then echo "Parameter #10 is ${10}" fi echo "---------------------" echo "All th command-line parameters are: "$*"" if [ $# -lt "$MINPARAMS" ] then echo echo "This script needs at least $MINPARAMS command-line arguments!" fi echo exit 0
执行结果:
$ sh location-var.sh 1 2 4 5 10 3 5 6 7 22 43 The name of this script is "location-var.sh". The name of this script is "location-var.sh". Parameter #1 is 1 Parameter #2 is 2 Parameter #10 is 22 --------------------- All th command-line parameters are: 1 2 4 5 10 3 5 6 7 22 43
{}标记法提供了一种提取从命令行传递到脚本的最后一个位置参数的简单办法.
args=$# # 位置参数的个数. lastarg=${!args}
或者
lastarg=${!#}
参数未传入报错
如果脚本需要一个命令行参数, 而在调用的时候, 这个参数没被提供, 那么这就可能造成给这个参数赋一个null变量, 通常情况下, 这都会产生问题. 一种解决这个问题的办法就是使用添加额外字符的方法, 在使用这个位置参数的变量和位置参数本身的后边全部添加同样的额外字符
variable1_=$1_ # 而不是 variable1=$1 # 这将阻止报错, 即使在调用时没提供这个位置参数.
shift命令重新分配位置参数shift命令会重新分配位置参数, 其实就是把所有的位置参数都向左移动一个位置.
$1 <--- $2, $2 <--- $3, $3 <--- $4, 等等.
原来的$1就消失了, 但是$0 (脚本名)是不会改变的. 如果传递了大量的位置参数到脚本中, 那么shift命令允许你访问的位置参数的数量超过10个, 当然{}标记法也提供了这样的功能
shift命令示例:
#! /bin/bash # shift-test.sh until [ -z "$1" ] do echo -n "$1" shift done echo exit 0