LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 763|回复: 5

请教大家个问题。看我的思路是否正确

[复制链接]
发表于 2005-8-18 10:20:00 | 显示全部楼层 |阅读模式
我是个SHELL新手,写得漏洞和想法很多,希望大家指正。
这段代码是昨天写得,想实现的功能是把name_list.txt里面的内容-----按行排列的文件名。

一次读取一行,也就是说一次读取一个文件名,然后进行压缩。我想了两种方式。我都写出来,请大家指正。

一,这个是用READ命令来实现的。我说了我是刚学SHELL,公司刚来项目,之前谁都没用过SHELL,把我赶上架了。

#---------------------------------------
#  ファイルを解凍
#---------------------------------------
while read list
do
unzip "$list" > vms/aaa
if [ $? -ne 0 ];then
Func_Syslog "ERR" "ADM-61003" "$list解凍処理が?常終了しました。"     #LOG输出。
exit 1
fi
done < name_list.txt
二,这段的思想是定义一个函数,然后再主函数中,用传参数的形式,把name_list.txt的内容传给这个函数。
#---------------------------------------
#  [関数]ファイルを解凍
#---------------------------------------

while [ $# -eq 0 ]
do
list=$1
unzip "$list" > vms/aaa
shift
if [ $? -ne 0 ];then
Func_Syslog "ERR" "ADM-61003" "$list解凍処理が?常終了しました。"     #LOG输出。
exit 1
fi
done



我还有个问题困扰,比如我现在写得这个脚本名字叫vmc_artist_unzip.sh,在另一个SH脚本里我要调用他,到底如何调用,请大家帮忙。
 楼主| 发表于 2005-8-18 10:26:54 | 显示全部楼层
焦急等待中。。。
回复 支持 反对

使用道具 举报

发表于 2005-8-18 11:36:31 | 显示全部楼层
Post by handsome1024
我是个SHELL新手,写得漏洞和想法很多,希望大家指正。
这段代码是昨天写得,想实现的功能是把name_list.txt里面的内容-----按行排列的文件名。

一次读取一行,也就是说一次读取一个文件名,然后进行压缩。我想了两种方式。我都写出来,请大家指正。

一,这个是用READ命令来实现的。我说了我是刚学SHELL,公司刚来项目,之前谁都没用过SHELL,把我赶上架了。

#---------------------------------------
#  ファイルを解凍
#---------------------------------------
while read list
do
unzip "$list" > vms/aaa
if [ $? -ne 0 ];then
Func_Syslog "ERR" "ADM-61003" "$list解凍処理が?常終了しました。"     #LOG输出。
exit 1
fi
done < name_list.txt
二,这段的思想是定义一个函数,然后再主函数中,用传参数的形式,把name_list.txt的内容传给这个函数。
#---------------------------------------
#  [関数]ファイルを解凍
#---------------------------------------

while [ $# -eq 0 ]
do
list=$1
unzip "$list" > vms/aaa
shift
if [ $? -ne 0 ];then
Func_Syslog "ERR" "ADM-61003" "$list解凍処理が?常終了しました。"     #LOG输出。
exit 1
fi
done



我还有个问题困扰,比如我现在写得这个脚本名字叫vmc_artist_unzip.sh,在另一个SH脚本里我要调用他,到底如何调用,请大家帮忙。


第一个方法是没有问题的,第二个看着有点别扭。既然$# -eq 0了,怎么又list=$1? 还有运行了shift再检测$?是不是不合逻辑阿。调用简单,直接/path/to/script就行了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-18 13:22:26 | 显示全部楼层
while [ $# -eq 0 ]             #执行循环。
do
list=$1                              #变量list取参数(也就是name_list.txt里面的内容,文件名)
unzip "$list" > vms/aaa    #解压缩到vms/aaa
if [ $? -ne 0 ];then            #判断返回值
Func_Syslog "ERR" "ADM-61003" "$list解凍失败。" #LOG输出。
exit 1
shift                                  #指向下一个参数
fi
done


这是我的意图。那个shift写错了原来。
回复 支持 反对

使用道具 举报

发表于 2005-8-19 06:12:55 | 显示全部楼层
Post by handsome1024
while [ $# -eq 0 ]             #执行循环。
do
list=$1                              #变量list取参数(也就是name_list.txt里面的内容,文件名)
unzip "$list" > vms/aaa    #解压缩到vms/aaa
if [ $? -ne 0 ];then            #判断返回值
Func_Syslog "ERR" "ADM-61003" "$list解凍失败。" #LOG输出。
exit 1
shift                                  #指向下一个参数
fi
done


这是我的意图。那个shift写错了原来。

list取的是位置参数,而循环是已没有参数为前提的,不是自相矛盾吗?
回复 支持 反对

使用道具 举报

发表于 2005-8-19 09:39:23 | 显示全部楼层
我估计用Linux得朋友看这个帖子会有点问题哦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表