我正在使用通配符来检查返回代码,以确定通配符是否与文件匹配。虽然这很好用,但它总是创建一个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
嗯,这就是一切,有更多的向下,但这不会导致问题,因为我已经通过退出测试了斑点。
答案 0 :(得分:2)
正是因为$? > 0
!! > 0
是一个创建文件0
的重定向!您应该知道[ $? > 0 ]
不是bash语法功能!这是对名为[
的程序的正常命令行调用,该程序是test
命令的链接。尝试:
$ which [
/usr/bin/[
所以你在那里使用的“表达式”不是表达式,它是普通的bash命令(带选项!)。因此,请使用-gt
:
if [ $? -gt 0 ] ; then ...
尝试man test
查看所有可能的选项。
答案 1 :(得分:1)
尝试更改为:
if [[ $? -gt 0 ]]; then
exit 1 # Keine Dateien gefunden
fi
你应该只对字符串使用>
,而且只能在特殊结构中使用((...))
和`[[...]]``。
答案 2 :(得分:0)
ls -1 $IN/$INFILE* &> /dev/null
if [ $? > 0 ]; then
exit 1 # Keine Dateien gefunden
fi
请注意$? > 0
部分。
答案 3 :(得分:0)
我不能说这是不是你的问题,但我通常会按如下方式写出来。
ls ... >/dev/null 2>&1