用于创建目录的Shell脚本

时间:2016-09-15 19:21:26

标签: shell

我写了一个shell脚本来创建一个目录,如果它不存在的话。我能够创建一个新目录。但是当我传递现有目录名时,elif语句没有被执行,而是Created Directory正在打印。怎么了?

if [[ ! -e /test/{a,b,c}/$dirname ]]; then
     mkdir "/test/{a,b,c}/$dirname" 
     echo "Created Directory"
elif  [[ ! -d /test/{a,b,c}/$dirname ]]; then
     echo "$dirname already exists"
fi

此处testabc是目录。

2 个答案:

答案 0 :(得分:1)

您不能同时对多个目录进行测试。

你需要循环dirs:

<p:dataTable id="coteTable" value="#{editEvaluationView.evaluation.listCote}" var="cote">
    <p:column colspan="10">
        <p:inputText id="cote" value="#{cote.valeur}" />
        <p:slider minValue="1" maxValue="10" for="cote" />
    </p:column>
    ...
</p:dataTable>

答案 1 :(得分:1)

支撑扩张不是在不加引用的扩张上进行的全局形式。因此,您不能依赖for dir in $dirs:您需要使用数组来存储大括号扩展结果,或者直接迭代这些结果。

如果您只想在目录的 none 存在的情况下创建任何目录:

# assign to an array
dirs=( /test/{a,b,c}/"$dirname" )

# iterate over contents and check, failing if any exists
for dir in "${dirs[@]}"; do
  [[ -d "$dir" ]] && { echo "$dir already exists" >&2; exit 1; }
done

# if we reach here, none of them exist, so create all directories with one mkdir call.
mkdir -- "${dirs[@]}" || exit # also, fail the script if mkdir fails

或者,如果采取部分行动是可以接受的:

for dir in /test/{a,b,c}/"$dirname"; do
  [[ -d "$dir" ]] && { echo "$dir already exists" >&2; exit 1; }
  mkdir -- "$dir"
done
相关问题