免费注册 查看新帖 |

Chinaunix

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

case语句使用问题 [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-26 17:53 |只看该作者 |倒序浏览
文件host内容为:
test1 2
test2 1
test3 2
test4 1

怎样逐条读取host文件内容,实现以下case语句
name=$1
version=$2
case $version in
2)
echo $name   //结果应该为test1,test3
;;
1)
echo $name   //结果应该为test2,test4
;;
*)
echo error
;;
esac

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2012-04-26 18:36 |只看该作者
  1. while read name version
  2. do
  3.     echo $name
  4.     echo $version
  5. done < host
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
3 [报告]
发表于 2012-04-26 19:32 |只看该作者
谢谢我还是不熟造成的不会灵活运用

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
4 [报告]
发表于 2012-04-27 14:46 |只看该作者
继续顶

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
5 [报告]
发表于 2012-04-27 15:16 |只看该作者
本帖最后由 lklkxcxc 于 2012-04-27 15:24 编辑

文件host内容为:
test1 5
test2 6
test3 5
test4 6

#!/bin/bash
set -x
source=/app/mon/source
aix53=agent_aix-5.3-ppc_2.1.13
aix61=agent_aix-6.1-ppc_2.1.13
hp23=agent_hpux_11.23-IA64_2.1.13
hp11=agent_hpux_11.11-PA-RISC_2.1.13
func(){
case $version in
5)
scp $source/${aix53}.zip $name:/opt/
scp $source/unzip.aix $name:/opt/
ssh $name "cd /opt;/opt/unzip.aix /opt/${aix53}.zip" >>unzip.log
ssh $name ln -s /opt/${aix53} /opt/fusioninventory
;;
6)
scp $source/${aix61}.zip $name:/opt/
scp $source/unzip.aix $name:/opt/
ssh $name "cd /opt;/opt/unzip.aix /opt/${aix61}.zip" >>unzip.log
ssh $name ln -s /opt/${aix61} /opt/fusioninventory
;;
B.11.23)
scp $source/source/${hp23}.zip $name:/opt/
scp $source/unzip.ia31 $name:/opt/
ssh $name "cd /opt;/opt/unzip.aix /opt/${hp23}.zip" >>unzip.log
ssh $name ln -s /opt/${hp23} /opt/fusioninventory
;;
B.11.11)
scp $source/${hp11}.zip $name:/opt/
scp $source/unzip.aix $name:/opt/
ssh $name "cd /opt;/opt/unzip.pa11 /opt/${hp11}.zip" >>unzip.log
ssh ln -s /opt/${hp11} /opt/fusioninventory
;;
*)
echo "Unknow OS System!"
;;
esac
}

while read name version
do
func
done <host

shell是这样写的读完test1 5记录后shell就退出了,后面记录没有读取进去

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
6 [报告]
发表于 2012-04-27 16:21 |只看该作者
回复 7# lklkxcxc
  1. cat -A host
复制代码
结果贴出来看看

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-06-23 06:20:00
7 [报告]
发表于 2012-04-27 17:00 |只看该作者
本帖最后由 lklkxcxc 于 2012-04-27 17:03 编辑

回复 8# Shell_HAT
我知道出错地方在哪里是因为while循环中如果使用rsh或者ssh执行命令就会中断退出while循环,具体原因不明:
比如:
while read name version

do
rcp host $name:/       //这个放在循环中没问题
ssh $name hostname //执行到这一步while循环肯定会终止
done < host
具体原因需要高手分析下,但把ssh $name hostname替换为pdsh -R ssh -w $name hostname不会导致循环终止

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
8 [报告]
发表于 2012-04-27 17:08 |只看该作者
回复 9# lklkxcxc


    刚才没注意看你的代码,改成这样试试:
  1. #!/bin/bash
  2. set -x
  3. source=/app/mon/source
  4. aix53=agent_aix-5.3-ppc_2.1.13
  5. aix61=agent_aix-6.1-ppc_2.1.13
  6. hp23=agent_hpux_11.23-IA64_2.1.13
  7. hp11=agent_hpux_11.11-PA-RISC_2.1.13
  8. func(){
  9. case $version in
  10. 5)
  11. scp $source/${aix53}.zip $name:/opt/
  12. scp $source/unzip.aix $name:/opt/
  13. ssh $name "cd /opt;/opt/unzip.aix /opt/${aix53}.zip" >>unzip.log
  14. ssh $name ln -s /opt/${aix53} /opt/fusioninventory
  15. ;;
  16. 6)
  17. scp $source/${aix61}.zip $name:/opt/
  18. scp $source/unzip.aix $name:/opt/
  19. ssh $name "cd /opt;/opt/unzip.aix /opt/${aix61}.zip" >>unzip.log
  20. ssh $name ln -s /opt/${aix61} /opt/fusioninventory
  21. ;;
  22. B.11.23)
  23. scp $source/source/${hp23}.zip $name:/opt/
  24. scp $source/unzip.ia31 $name:/opt/
  25. ssh $name "cd /opt;/opt/unzip.aix /opt/${hp23}.zip" >>unzip.log
  26. ssh $name ln -s /opt/${hp23} /opt/fusioninventory
  27. ;;
  28. B.11.11)
  29. scp $source/${hp11}.zip $name:/opt/
  30. scp $source/unzip.aix $name:/opt/
  31. ssh $name "cd /opt;/opt/unzip.pa11 /opt/${hp11}.zip" >>unzip.log
  32. ssh ln -s /opt/${hp11} /opt/fusioninventory
  33. ;;
  34. *)
  35. echo "Unknow OS System!"
  36. ;;
  37. esac
  38. }
  39. exec 3 <host
  40. while read name version
  41. do
  42. func
  43. done
  44. exec 3 <&-
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2012-04-27 17:08 |只看该作者
lklkxcxc 发表于 2012-04-27 17:00
回复 8# Shell_HAT
我知道出错地方在哪里是因为while循环中如果使用rsh或者ssh执行命令就会中断退出while ...


这个用不着高手分析了吧
http://bbs.chinaunix.net/forum.p ... &fromuid=467748
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP