免费注册 查看新帖 |

Chinaunix

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

[学习共享] 从Solaris到AIX/LINUX之KSH脚本取巧的办法(关于PDKSH) [复制链接]

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

单位以前一直用SUN Solaris,装Oracle跑一些脚本,现在换到IBM AIX 和LINUX上去了,也装Oracle也跑一些脚本,结果在迁移时发现在Solaris上的KSH脚本到了IBM AIX和LINUX上就有问题了!
按Oracle要求要装PDKSH,发现一些启动脚本没问题,但一些涉及到运算的脚本就有问题:关键是变量在子Shell中赋值后出来就为0了!
如:
#!/bin/ksh
integer aline=0
ls -1 | while read line
do
  aline=aline+1
  echo $aline
done

echo $aline
用PDKSH跑如下:
1
2
3
4
5
6
7
8
0
而用自带的KSH跑如下:
1
2
3
4
5
6
7
8
8

开始不知道怎么回事,后来从《高级Bash脚本编程指南》中知道要避免子Shell,不过改脚本的工作量太大,后来用个取巧的办法:
1.安装OS 自带KSH,cp /bin/ksh /bin/ksh99
2.卸载KSH,安装PDKSH
3.所有有子Shell循环的KSH脚本调用ksh99:#!/bin/ksh99
这样一来,所有的脚本都可以正常使用了。

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2012-10-22 11:27 |只看该作者
为何不把所有的脚本的第一行都替换成 #!/bin/ksh99
这样是否更简单, 不用判断是否有子shell 。

论坛徽章:
0
3 [报告]
发表于 2012-10-22 11:34 |只看该作者
有些脚本用PDKSH跑没问题,用KSH99跑就出错!
在Solaris中没这个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP