IF构造中的语法问题:shell脚本

时间:2017-09-21 05:52:22

标签: shell

我只有一个条件需要检查。我想在shell脚本中使用if-else构造。我该怎么写呢大多数文档表明构造正在做多个方面,这就是他们使用

的原因
if []; then
 echo "do something"
elif
 echo "somethingelse"
else
 echo "something 2"
fi

但在我的情况下,我正在编写我的构造,如下所示。它给出了语法问题。

#!/bin/sh
hadoopFileList=`hadoop fs -ls /app/SmartAnalytics/Apps/service_request_transformed.db/sr_denorm_bug_details/ | sed '1d;s/  */ /g' | cut -d\  -f8`
destination="/apps/phodisvc/creandoStaging"

scpData()
{
 for file in $hadoopFileList
 do
  echo $file
  echo "copying file to the staging directory"
  hadoop fs -copyToLocal $file $destination
  sleep 2s
  echo "deleting the file"
  echo ${file##*/}
 done
}

if [[ -d "$destination" ]]; then
#file exists copy data
 scpData()
else
#else create directory and copy data
 mkdir -p $destination
 scpData()
fi

2 个答案:

答案 0 :(得分:1)

你不应该用()调用你的函数,只有定义需要它们。

错误:

myFunction() {
echo "This line is from my Function"
}

myFunction()

正确的方式:

myFunction() {
echo "This line is from my Function"
}

myFunction

答案 1 :(得分:0)

作为PS。提到,应该在没有scpData的情况下调用像()这样的bash函数。 除此之外,您的if[];then ... else ... fi语法是正确的。 因此,你的if循环将起作用:

if [ -d "$destination" ]; then
    scpData
else
    mkdir -p $destination
    scpData
fi   

然而,在这种特殊情况下,if-loop不是必需的, 因为mkdir的-p选项会检查条件。 即,如果目录不存在,它只会使目录。 所以我重新编写了你的​​if循环(不使用if-else-fi),如下所示:

mkdir -p $destination
scpData

做同样的事情!