《高级Bash脚本编程指南》学习笔记(4)——基础:变量类型

局部变量

在代码块或函数中可见


环境变量

分配给环境变量的空间是有限的. 创建太多环境变量, 或者给一个环境变量分配太多的空间都会引起错误。

如果一个脚本要设置一个环境变量, 那么需要将这些变量"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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值