我想在运行mkdir时创建一个简单的检查来创建一个目录。首先,它将检查dir是否已经存在,如果存在,它将跳过。如果dir不存在,它将运行mkdir,如果mkdir失败(意味着脚本无法创建dir,因为它没有足够的权限),它将终止。
这就是我写的:
if [ ! -d "$FINALPATH" ]; then
if [[ `mkdir -p "$FINALPATH"` -ne 0 ]]; then
echo "\nCannot create folder at $FOLDERPATH. Dying ..."
exit 1
fi
fi
但是,第二个if似乎没有正常工作(我将0作为成功的mkdir的返回值)。那么如何正确写出第二个if? mkdir在成功和失败后会回报什么?
答案 0 :(得分:16)
运行结果
`mkdir -p "$FINALPATH"`
不是返回码,而是程序的输出。 $?
返回码。所以你可以做到
if mkdir -p "$FINALPATH" ; then
# success
else
echo Failure
fi
或
mkdir -p "$FINALPATH"
if [ $? -ne 0 ] ; then
echo Failure
fi
答案 1 :(得分:2)
更短的方式是
mkdir -p "$FINALPATH" || echo failure
也是惯用语:
if mkdir -p "$FINALPATH"
then
# .....
fi
同样,您可以while .....; do ....; done
或until ......; do ......; done
答案 2 :(得分:2)
为了完整起见,您可以通过发出以下命令退出:
mkdir -p "$FINALPATH" || { echo "Failure, aborting..." ; exit 1 ; }
大括号是必要的,否则exit 1
会在两种情况下执行。
或者您可以创建一个中止函数,如:
errormsg()
{
echo "$1"
echo Aborting...
{ exit 1 ; }
}
然后通过发出:
来调用它mkdir -p "$FINALPATH" || errormsg "Failure creating $FINALPATH"
编辑: