ksh
(AIX
上)のディレクトリに存在する複数のファイルを見つける方法
私は以下のものを試しています:
if [ $# -lt 1 ];then
echo "Please enter the path"
exit
fi
path=$1
if [ [ ! f $path/cc*.csv ] && [ ! f $path/cc*.rpt ] && [ ! f $path/*.xls ] ];then
echo "All required files are not present\n"
fi
check[6]: !: unknown test operator
// check is my file nameのようなエラーが発生します。
私のスクリプトの何が問題になっていますか。誰かが私を助けてくれませんか?.
test -f
は、ワイルドカードから展開された複数のファイルに対しては機能しません。代わりに、nullリダイレクトされたls
を含むShell関数を使用することもできます。
present() {
ls "$@" >/dev/null 2>&1
}
if [ $# -lt 1 ]; then
echo "Please enter the path"
exit
fi
path=$1
if ! present $path/cc*.csv && ! present $path/cc*.rpt && ! present $path/*.xls; then
echo "All required files are not present\n"
fi
ところで&&
を使用しても問題ないですか?この場合、not present
内にcc*.csv
またはcc*.rpt
またはcc*.xls
という名前のファイルがない場合にのみ$path
を取得します。
if [ [ ! f $path/cc*.csv ] && [ ! f $path/cc*.rpt ] && [ ! f $path/*.xls ] ];then
echo "All required files are not present\n" fi
check[6]: !
:不明なテストオペレーター
オペランド 'f
'は不明なオペランド-> '-f
'
if [ [ ! -f $path/cc*.csv ] && [ ! -f $path/cc*.rpt ] && [ ! -f $path/*.xls ] ];then
echo "All required files are not present\n"
fi
あなたの場合、あなたのallファイルは、エコーする前に欠落している必要があります...もちろん、それは目標によって異なります。
AIXのkshでチェックアウトできません。