【发布时间】:2018-01-20 09:33:41
【问题描述】:
我在 ${POWERCENTER_FILE_DIR} 位置有文件列表。 这些文件由行标题和值组成。
MART_Apple.csv
MART_SAMSUNG.csv
MART_SONY.csv
MART_BlackBerry.csv
要求:
- 只选择至少有 1 行的文件。
- 为至少有 1 行的文件添加时间戳。
例如: 如果除 MART_BlackBerry.csv 之外的所有文件都至少有一行,那么我的输出文件名应该是
MART_Apple_20170811112807.csv
MART_SAMSUNG_20170811112807.csv
MART_SONY_20170811112807.csv
到目前为止尝试过的代码
#!/bin/ksh
infilename=${POWERCENTER_FILE_DIR}MART*.csv
echo File name is ${infilename}
if [ wc -l "$infilename"="0" ];
then
RV=-1
echo "input file name cannot be blank or *"
exit $RV
fi
current_timestamp=`date +%Y%m%d%H%M%S`
filename=`echo $infilename | cut -d"." -f1 `
sftpfilename=`echo $filename`_${current_timestamp}.csv
cp -p ${POWERCENTER_FILE_DIR}$infilename ${POWERCENTER_FILE_DIR}$sftpfilename
RV=$?
if [[ $RV -ne 0 ]];then
echo Adding timestamp to ${POWERCENTER_FILE_DIR}$infilename failed ... Quitting
echo Return Code $RV
exit $RV
fi
遇到如下错误:
line 3: [: -l: binary operator expected
cp: target `MART_Apple_20170811121023.csv' is not a directory
failed ... Quitting
Return Code 1
坦率地说,我无法理解这些错误,也不确定我做对了。 unix脚本初学者。任何专家都可以指导我正确的方法。
【问题讨论】:
-
标记为
bash并使用ksh?嗯? -
[ wc -l "$infilename"="0" ];是错误的。好吧,看起来你必须在开始编写脚本之前做一些功课。例如 1) 命令替换在哪里,2) 你检查过wc -l的输出,如果是的话 3) 你将如何过滤这些结果以获得你想要的结果 4) 你在这里做什么比较,整数或字符串 5) 等等。 [ shellcheck ] 也是一个很棒的修正工具,适用于想要 bash 的脚本编写者。祝你好运。 ;) -
@sjsam 谢谢,更正了标记。是的,我犯了很多错误。 wc =0 对我没有帮助。感谢介绍 shellcheck 很好。
-
顺便说一句,我的回答是为您提供现成的解决方案。如果它符合您的需要,您可以接受它作为答案。 :)