私はKSHを持っています(大きな打撃ではない)プリエンプトされたスクリプトをファイル数で確認したいと思います。ファイルがない場合は、「EMPTY」を印刷して終了したいと思います。それ以外の場合は続けます。
問題は、ファイルの数を数えるとファイルが空になったり中断されることです。
パスワード:
###################################################
# Test to see if files exist in Drop Folder
###################################################
CONTENTS=$(ls ${gp_path}ALLSTUFF*.zip)
if [[ ${#CONTENTS[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
空でない場合は有効です。
空の場合、次のエラーが発生し、システムがクラッシュします。 EMPTYを報告し、0で終了したいと思います。
間違い:
/nas/Opt/databox/folder/ALLSTUFF*.zip not found
私は何が間違っていましたか?
試み #2
私もこれを試しましたが、同じ結果を得ました。
if [ "$(ls ${gp_path}ALLSTUFF*.zip)" ]; then
print 'NOT EMPTY'
else
print 'EMPTY'
exit 0
fi
ベストアンサー1
Kusalanandaの答えに対するStéphane Chazelasのコメントに対するフォローアップ:
$ ksh
$ echo ${.sh.version}
Version AJM 93u+ 2012-08-01
$ ls
TABLE1.csv TABLE2.csv
ファイルを保存するには配列を使用してください。いくつかのファイルに一致するglob式で始まります。
$ typeset -a files
$ files=( ~(N)*.csv )
$ echo "${#files[@]}"
2
$ typeset -p files
typeset -a files=(TABLE1.csv TABLE2.csv)
一致しない「ネイキッド」globは、一致しないglobがglobパターンによって文字列に置き換えられることを示しています。
$ files=( *.txt )
$ echo "${#files[@]}"
1
$ typeset -p files
typeset -a files=('*.txt')
今、「null glob」という接頭辞がつきます。
$ files=( ~(N)*.txt )
$ echo "${#files[@]}"
0
$ typeset -p files
(empty output)
$
ksh のマニュアルページの「ファイル名の生成」を参照してください。
お客様の質問に具体的に回答するには:
typeset -a contents=( ~(N)"$gp_path"/ALLSTUFF*.zip )
if [[ ${#contents[@]} -eq 0 ]]; then
print 'EMPTY'
exit 0
else
print 'NOT EMPTY'
fi
変数名をすべて大文字にする習慣を捨てる必要があります。