《高级Bash脚本编程指南》学习笔记(4)——基础:变量类型
来源:互联网 发布:网络女主播卖淫 编辑:程序博客网 时间:2024/05/16 09:57
局部变量
环境变量在代码块或函数中可见
分配给环境变量的空间是有限的. 创建太多环境变量, 或者给一个环境变量分配太多的空间都会引起错误。
如果一个脚本要设置一个环境变量, 那么需要将这些变量"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 10MINPARAMS=10echoecho "The name of this script is \"$0\"."echo "The name of this script is \"`basename $0`\"."echoif [ -n "$1" ] then echo "Parameter #1 is $1" fi if [ -n "$2" ]then echo "Parameter #2 is $2"fiif [ -n "${10}" ]then echo "Parameter #10 is ${10}"fiecho "---------------------"echo "All th command-line parameters are: "$*""if [ $# -lt "$MINPARAMS" ]then echo echo "This script needs at least $MINPARAMS command-line arguments!"fiechoexit 0
执行结果:$ sh location-var.sh 1 2 4 5 10 3 5 6 7 22 43The name of this script is "location-var.sh".The name of this script is "location-var.sh".Parameter #1 is 1Parameter #2 is 2Parameter #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.shuntil [ -z "$1" ]do echo -n "$1" shiftdoneechoexit 0
0 0
- 《高级Bash脚本编程指南》学习笔记(4)——基础:变量类型
- 《高级Bash脚本编程指南》学习笔记(2)——基础:变量
- 《高级Bash脚本编程指南》学习笔记(3)——基础:变量赋值
- 《高级Bash脚本编程指南》学习笔记(5)——基础:引用变量
- 《高级Bash脚本编程指南》学习笔记(1)——基础:特殊字符
- 《高级Bash脚本编程指南》学习笔记(6)——基础:转义
- 《高级Bash脚本编程指南》学习笔记(7)——基础:退出/退出码
- 《高级Bash脚本编程指南》学习笔记(8)——基础:条件测试结构
- 《高级Bash脚本编程指南》学习笔记(9)——基础:文件测试操作符
- 《高级Bash脚本编程指南》学习笔记(10)——基础:其他比较操作符
- 高级Bash脚本编程指南学习笔记
- 高级Bash脚本编程指南(12):指定变量的类型: 使用declare或者typeset
- 高级Bash脚本编程指南——一本深入学习shell脚本艺术的书籍
- 高级Bash脚本编程指南(10):内部变量
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- 高级Bash脚本编程指南
- iOS objc_msgSend 报错解决方案
- 如何设计名片二维码
- jsp页面el表达式区分操作系统
- 闰年
- jstack直接dump出jvm的thread statck解决系统运行过程中停止响应的问题
- 《高级Bash脚本编程指南》学习笔记(4)——基础:变量类型
- NSAssert和NSAssertionHandler:断言相关
- collection 采集系统定时任务配置
- Adnroid系统分布式编译: Ubuntu系统,ccache + distcc + rant
- Apache commons 之 Collections :Comparator
- ITK在vs2010下安装、搭建
- java.lang.OutOfMemoryError: Java heap space
- yum安装软件包错误 HTTP Error 404 - Not Found Trying other mirror.
- StringUtils.isEmpty(requestMessge)