Linux:Bash:mkdir返回什么

时间:2011-08-22 22:41:19

标签: linux bash mkdir

我想在运行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在成功和失败后会回报什么?

3 个答案:

答案 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 ....; doneuntil ......; 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"

编辑:

  • 大括号,而不是括号,因为括号仅退出子shell。 (谢谢@Charles Duffy)
  • 写入消息并退出的功能