Chinaunix首页 | 论坛 | 博客
  • 博客访问: 535978
  • 博文数量: 55
  • 博客积分: 1520
  • 博客等级: 上尉
  • 技术积分: 661
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-19 22:01
文章存档

2013年(1)

2012年(1)

2011年(7)

2010年(16)

2009年(30)

我的朋友

分类:

2009-07-21 18:07:05

BASH的参数可以用$加数字编号来访问。
如$1代表第一个参数,$2代表第二个参数,以此类推.
不能用$10来访问第十个参数,如果遇到参数超过十个的情况,必须处理或保存第一个参数($1),然后使用 shift命令删除参数1并将所有剩余的参数下移一位,因此$10就变成了$9.
$#的值将被更新以反映参数的剩余数量。

请看下面这个例子:
  1 #!/bin/bash
  2 i=1;
  3 while (($#>0))
  4 do
  5     echo $i, $1
  6     shift
  7     let i=i+1
  8 done
存为huabo_cat,加上可执行权限。
然后执行
[src]# huabo_cat apr*
1, apr.h
2, apr_allocator.h
3, apr_errno.h
4, apr_file_info.h
5, apr_file_io.h
6, apr_general.h
7, apr_inherit.h
8, apr_pools.h
9, apr_queue.h
10, apr_tables.h
11, apr_thread_mutex.h
12, apr_time.h
13, apr_user.h
14, apr_want.h
结果表明,脚本循环输出了通配符所匹配的所有文件名。

这个脚本稍做修改,就可以实现更实用的功能。
如下:
  1 #!/bin/bash
  2 while (($#>0))
  3 do
  4     echo ------$1------
  5     (cat $1)
  6     shift
  7 done
执行
[src]# huabo_cat apr* | grep -e ^---- -e '^struct iovec'
------apr.h------
------apr_allocator.h------
------apr_errno.h------
------apr_file_info.h------
------apr_file_io.h------
------apr_general.h------
------apr_inherit.h------
------apr_pools.h------
------apr_queue.h------
------apr_tables.h------
------apr_thread_mutex.h------
------apr_time.h------
------apr_user.h------
------apr_want.h------
struct iovec
这样可以清楚的看到struct iovec在apr_want.h文件中定义的。
而直接使用cat没这个效果。
[src]# cat apr* | grep -e ^---- -e '^struct iovec'
struct iovec
阅读(8849) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

alvinniu2014-01-13 16:47:14

但不能用$10来访问第十个参数,如果遇到参数超过十个的情况,必须处理或保存第一个参数($1),然后使用 shift命令删除参数1并将所有剩余的参数下移一位,因此$10就变成了$9
这句话是错的
可以直接访问第11个入参

 ~$cat testArg.sh
#!/bin/bash


echo ${11}

~$./testArg.sh 1 2 3 4 5 6 7 8 9 10 11 12
11