1

ワイルドカードがファイルと一致するかどうかを判断するために、ワイルドカードを使用して ls を作成し、戻りコードを確認しています。これはうまく機能しますが、ファイル サイズが 0 のファイル 0 が常に作成されます。誰かが理由を見ますか?

$SSTDIR=/tmp/test
$SSTFILE=test

ls -1 $SSTDIR/$SSTFILE* &> /dev/null
if [ $? = 0 ]; then
    exit 2
fi

どんな助けでも大歓迎です:)

編集:

# Anzahl Parameter überprüfen
if [ ${#} == "6" ]; then
    SST=$1
    IN=$2
    INFILE=$3
    SSTDIR=$4
    SSTFILE=$5
    SORT=$6
else
    echo "Verwendung: $0 \"SST Name\" \"Inbound Verzeichnis ohne /\" \"Name der eingehenden Datei\" \"Outbound Verzeichnis ohne /\" \"Name der ausgehenden Datei\" \"Stelle ab der sortiert wird\""
    exit 3 # Falsche Anzahl Parameter
fi

# Überprüfe ob das eingehende RVS Verzeichnis nicht leer ist
ls -1 $IN/$INFILE* &> /dev/null
if [ $? > 0 ]; then
    exit 1 # Keine Dateien gefunden
fi

# Überprüfe ob das SST Verzeichnis bereits Dateien beinhaltet
ls -1 $SSTDIR/$SSTFILE* &> /dev/null
if [ $? = 0 ]; then
    exit 2 # Dateien existieren bereits im SST Verzeichnis
fi

それがすべてです。さらに下向きがありますが、出口でスポットをテストしたので、それは問題の原因ではありません。

4

4 に答える 4

2

そのせいです$? > 0!! > 0ファイルを作成するリダイレクトです0[ $? > 0 ]は bash の構文機能ではないことに注意してください。[これは、コマンドへのリンクであるという名前のプログラムへの通常のコマンドライン呼び出しtestです。試す:

$ which [
/usr/bin/[

したがって、そこで使用する「式」は式ではなく、通常の bash コマンド (オプション付き!) です。代わりに、次を使用します-gt

if [ $? -gt 0 ] ; then ...

man test可能なすべてのオプションを確認してください。

于 2012-04-19T08:16:41.493 に答える
1

次のように変更してみてください:

if [[ $? -gt 0 ]]; then
    exit 1 # Keine Dateien gefunden
fi

>文字列と特別な構造でのみ使用する必要があります-((...))および `[[...]]`。

于 2012-04-19T08:10:17.167 に答える
0
ls -1 $IN/$INFILE* &> /dev/null
if [ $? > 0 ]; then
    exit 1 # Keine Dateien gefunden
fi

部分に注意してください$? > 0

于 2012-04-19T08:09:11.167 に答える
0

それがあなたの問題かどうかはわかりませんが、通常は次のように書きます。

ls ... >/dev/null 2>&1
于 2012-04-19T08:09:17.993 に答える