2011-03-31 65 views
0

Shell脚本新手在这里。只是想在我的shell脚本上输入一些内容。如果某个特定的目录存在,我基本上想从shell脚本启动一个perl脚本。unix编程逻辑检查目录

我的逻辑声音?我的支票好吗?

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 
+0

SO并不意味着成为分布式测试平台。你应该在本地测试你的脚本,尝试所有各种各样的角落案例,如果遇到了一个你无法解决的问题,那么* *会提出一个很好的问题。 – SiegeX 2011-03-31 04:22:18

+0

在http://codereview.stackexchange.com上可能会得到更多答案 – 2011-03-31 12:27:50

回答

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 
+0

我会添加'$ 0'而不是硬编码'mytest.sh' – SiegeX 2011-03-31 04:35:14

+0

谢谢所有!很多很棒的建议。我会接受任何这些答案。您的输入已经记录并将在未来使用。 – jdamae 2011-03-31 04:44:22

+0

谢谢@SiegeX,编辑我的答案以取代硬编码。作为一个旁注:我自己总是在我的脚本中使用'$ 0'来达到这个目的,但是从来没有真正重命名任何脚本来充分利用非硬编码的脚本名称:) – anubhava 2011-03-31 12:28:48

0

不是真正的关键,但你可能要改变你的反引号来$()如果你的外壳支持的话。您在内部if离开了您的交易fi构建

+0

还有一些'then'之前忘了';'的 – SiegeX 2011-03-31 04:35:34

1
  • 好缩进
  • 良好的变量名
  • 良好的输入检查
    (在运行脚本之前,您可能需要检查您的$ 1和$ 2输入是否正确)如果您有错误的值,可能会炸毁脚本)
  • 良好的包裹在DBL引号瓦尔“$ DIR”

  • 不赞成采用背抽动命令替换的。使用$(CMD)

  • 消息应该是“试图创建目录...”在第一或simliar(但很次要的问题)
  • 如果块,如果你不能创建目录,然后退出
  • 这意味着为什么要在2个地方打电话给perl。将它移动到if/then/else块之外,以便只在没有退出上面的错误时才执行。这是重复的代码,如果脚本变得更大,您可以修改该行的一个副本,而不是其他代码。
  • 每久留美,缺少的网络

我希望这有助于。

+0

很好的输入。谢谢。是的,我肯定需要清理那些额外的perl调用并简化它。 – jdamae 2011-03-31 04:43:11