#!/bin/bash
outbound=/home/user/outbound/
putfile=DATA_FILE_PUT_*.CSV
cd $outbound
filecnt=0
for file in $putfile; do let filecnt=filecnt+1; done
echo "Filecount: " $filecnt
因此,当出站目录中有文件时,此代码很好用。我可以将文件放入出站路径,只要它们与putfile掩码匹配,则文件将按预期增加。
问题出在哪里进来的,如果我跑这虽然没有位于文件$outbound
。如果文件数为零,则$filecnt
仍然返回a,1
但0
如果文件中没有文件,我希望它返回a 。
我是否缺少简单的东西?
将其放在set -x
该#!
行的下方,以查看您的脚本在做什么。
如果没有匹配的文件,则通配符将不展开,并且循环将运行一次,file
其值为DATA_FILE_PUT_*.CSV
。
要更改此设置,请设置nullglob选项。请注意,这仅适用于bash,不适用于sh。
shopt -s nullglob
putfile=DATA_FILE_PUT_*.CSV
for file in $putfile; do let filecnt=filecnt+1; done
请注意,该putfile
变量包含通配符模式,而不是文件名列表。将匹配列表放在变量中可能更有意义。这需要是一个数组变量,并且您需要首先更改当前目录。匹配文件的数量就是数组的长度。
#!/bin/bash
shopt -s nullglob
outbound=/home/user/outbound/
cd "$outbound"
putfiles=(DATA_FILE_PUT_*.CSV)
echo "Filecount: " ${#putfiles}
如果需要遍历文件,请注意用双引号保护数组的扩展,否则,如果文件名包含空格,则将其拆分为多个单词(如果文件名包含通配符,则将扩展它们) )。
#!/bin/bash
shopt -s nullglob
outbound=/home/user/outbound/
cd "$outbound"
putfiles=(DATA_FILE_PUT_*.CSV)
for file in "${putfiles[@]}"; do
echo "Processing $file"
done
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句