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 回答