Chinaunix
标题:
case语句使用问题
[打印本页]
作者:
lklkxcxc
时间:
2012-04-26 17:53
标题:
case语句使用问题
文件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
作者:
Shell_HAT
时间:
2012-04-26 18:36
while read name version
do
echo $name
echo $version
done < host
复制代码
作者:
lklkxcxc
时间:
2012-04-26 19:32
谢谢我还是不熟造成的不会灵活运用
作者:
lklkxcxc
时间:
2012-04-27 14:46
继续顶
作者:
lklkxcxc
时间:
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就退出了,后面记录没有读取进去
作者:
Shell_HAT
时间:
2012-04-27 16:21
回复
7#
lklkxcxc
cat -A host
复制代码
结果贴出来看看
作者:
lklkxcxc
时间:
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不会导致循环终止
作者:
Shell_HAT
时间:
2012-04-27 17:08
回复
9#
lklkxcxc
刚才没注意看你的代码,改成这样试试:
#!/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
}
exec 3 <host
while read name version
do
func
done
exec 3 <&-
复制代码
作者:
waker
时间:
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
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2