我正在尝试在目录中搜索文件并相应地打印合适的消息。但是我没有得到所需的结果。例如。当文件存在于目录中时,结果符合预期但是,当不存在文件时,输出显示如下
ls: cannot access 'Voucher_Sales_Order_Report_202305*.unl': No such file or directory
里面的其他
虽然 Else 块是正确的,但我想删除上面 ls 的错误消息。我已经尝试过 /dev/null 它仍然不起作用。请帮忙
#/bin/bash
cd /applogs/NFS_SO_PROCESSING
d=`date -d '1 month ago' '+%Y%m'`
filename=`ls Voucher_Sales_Order_Report_$d*.unl`
if [ "$filename" ]
then
echo "Inside IF"
else
echo "Inside Else"
fi
答案1
应该:
#! /bin/bash -
shopt -s nullglob
cd /applogs/NFS_SO_PROCESSING || exit
info() {
[ "$#" -eq 0 ] || printf '%s\n' "$@"
}
die() {
info >&2 "$@"
exit 1
}
d=$(date -d '1 month ago' '+%Y%m')
filename=(
Voucher_Sales_Order_Report_"$d"*.unl
)
case ${#filename[@]} in
(1) info 'OK, one matching file';;
(0) die 'ERROR, no matching file';;
(*) die 'ERROR, more than one matching file';;
esac
do-what-you-like with "$filename", same as "${filename[0]}" in bash