免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1728 | 回复: 3
打印 上一主题 下一主题

看了一个开源项目中的一个脚本,有两个疑问,还请各位赐教! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-01-18 22:13 |只看该作者 |倒序浏览
本帖最后由 uusky_cu 于 2012-01-18 22:17 编辑

脚本内容,当然只是头部的一部分,熟悉uboot的知道,这段就是uboot项目中mkconfig脚本的一段:

  1. #!/bin/sh -e

  2. # Script to create header files and links to configure
  3. # U-Boot for a specific board.
  4. #
  5. # Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
  6. #
  7. # (C) 2002-2010 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
  8. #

  9. APPEND=no        # Default: Create new config file
  10. BOARD_NAME=""        # Name to print in make output
  11. TARGETS=""

  12. arch=""
  13. cpu=""
  14. board=""
  15. vendor=""
  16. soc=""
  17. options=""

  18. if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
  19.         # Automatic mode
  20.         line=`egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` || {
  21.                 echo "make: *** No rule to make target \`$2_config'.  Stop." >&2
  22.                 exit 1
  23.         }

  24.         set ${line}#问题点1
  25.         # add default board name if needed
  26.         [ $# = 3 ] && set ${line} ${1}#问题点2
  27. fi
复制代码
其中boards.cfg文件内容如下:(部分)

  1. # Target                     ARCH        CPU         Board name          Vendor                SoC         Options
  2. ###########################################################################################################

  3. qong                         arm         arm1136     -                   davedenx       mx31
  4. mx31ads                      arm         arm1136     -                   freescale      mx31
  5. imx31_litekit                arm         arm1136     -                   logicpd        mx31
  6. mx35pdk                      arm         arm1136     -                   freescale      mx35
  7. omap2420h4                   arm         arm1136     -                   ti             omap24xx
  8. tnetv107x_evm                arm         arm1176     tnetv107xevm        ti             tnetv107x
  9. armadillo                    arm         arm720t
  10. ep7312                       arm         arm720t
  11. impa7                        arm         arm720t
  12. modnet50                     arm         arm720t
  13. lpc2292sodimm                arm         arm720t     -                   -              lpc2292
  14. SMN42                        arm         arm720t     -                   siemens        lpc2292
  15. evb4510                      arm         arm720t     -                   -              s3c4510b
  16. a320evb                      arm         arm920t     -                   faraday        a320
  17. at91rm9200ek                 arm         arm920t     at91rm9200ek        atmel          at91        at91rm9200ek
  18. at91rm9200ek_ram             arm         arm920t     at91rm9200ek        atmel          at91        at91rm9200ek:RAMBOOT
  19. eb_cpux9k2                   arm         arm920t     -                   BuS            at91
  20. cpuat91                      arm         arm920t     cpuat91             eukrea         at91        cpuat91
复制代码
问题点1:line的值,就是根据参数2 ${2}提供的target名字,搜索boards.cfg文件,找到一个匹配的行。我的疑问是,为啥需要set ${line},有啥作用呢?而且整个脚本内部,line变量出现了3次,全部在这段脚本里面。
问题点2:进入这个分支的条件之一就是$#等于2,为何又在该分支中判断[$# = 3]呢?这段代码岂不是永远执行不到?

还请shell达人给予指点,也请各位看官参与讨论!先谢过了。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2012-01-18 23:38 |只看该作者
本帖最后由 blackold 于 2012-01-19 08:28 编辑

回复 1# uusky_cu


    set ${line} 会改变位置参数,当然也改变 # 参数。

论坛徽章:
0
3 [报告]
发表于 2012-01-18 23:53 |只看该作者
回复 2# blackold

噢!my god!终于得到真解了。我单独写了个脚本测试了一下。果然如兄台所说。

对set命令开始刮目相看,回去看看man了,谢谢了!

论坛徽章:
0
4 [报告]
发表于 2012-01-19 01:19 |只看该作者
不错 学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP