我写了一个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
此处test
,a
,b
和c
是目录。
答案 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