我只有一个条件需要检查。我想在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
答案 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
做同样的事情!