unix编程逻辑来检查目录

时间:2011-03-31 04:18:21

标签: shell unix

Shell脚本新手在这里。只是想在我的shell脚本上输入一些内容。如果存在特定目录,我基本上希望从shell脚本启动perl脚本。

我的逻辑是否合理?我的支票好吗?

if [ $# != 2 ]; then
    echo "USAGE: ./mytest.sh <host> <name>" 2>&1
    echo "       ./mytest.sh foo101.test.in foo" 2>&1 
    exit 1
fi

#Directories
DIRDATE=`date '+%Y%m%d'`
BASE=/dumps
STGDIR=$BASE/temp/$DIRDATE

#Check if directory exists
if [ -d "$STGDIR" ] then
        echo "$STGDIR directory exists!"
        perl foobar.pl -n $1 -d $STGDIR/ -s $2
else
        echo "$STGDIR directory not found! Create the directory"
        mkdir $STGDIR || { echo 'mkdir command failed' ; exit 1;}
        if [ -d "STGDIR" ] then
                echo "$STGDIR directory exists!"
                perl foobar.pl -n $1 -d $STGDIR/ -s $2
fi

3 个答案:

答案 0 :(得分:1)

没问题,但可以像这样简化:

if [ $# != 2 ]; then
    echo "USAGE: $0 <host> <name>" 2>&1
    echo "       $0 foo101.test.in foo" 2>&1 
    exit 1
fi

#Directories
DIRDATE=$(date '+%Y%m%d')
BASE=/dumps
STGDIR=$BASE/temp/$DIRDATE

# create directory $STGDIR if needed
[ ! -d "$STGDIR" ] && ( mkdir "$STGDIR" || { echo 'mkdir command failed'; exit 1; } )

# execute your perl script
perl foobar.pl -n $1 -d $STGDIR/ -s $2

答案 1 :(得分:1)

  • 良好的缩进
  • 好的变量名称
  • 良好的输入检查
    (你可能想要在运行脚本之前检查你的$ 1和$ 2输入是否正确,如果你的值有错误可能会爆炸)
  • 很好用dbl-quotes“$ DIR”包装vars

  • 不推荐使用back-tic命令替换。使用$(cmd)

  • 消息应该是“试图创建目录......”或者是simliar(但非常小的问题)
  • 在第一个if块上,如果你不能创建dir,则退出
  • 这就是为什么在2个地方调用perl的原因。将它移到if / then / else块之外,这样只有在你没有退出上面的错误时它才会执行。它是重复的代码,如果您的脚本变得更大,您可以修改该行的一个副本,而不是另一个副本。
  • 每个kurumi,缺少fi

我希望这会有所帮助。

答案 2 :(得分:0)

不是很重要,但如果您的shell支持,您可能希望将反引号更改为$()。您在内部fi构造

中遗漏了结束if