Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用shell脚本创建多个目录_Linux_Shell_Unix - Fatal编程技术网

Linux 如何使用shell脚本创建多个目录

Linux 如何使用shell脚本创建多个目录,linux,shell,unix,Linux,Shell,Unix,我不熟悉shell脚本,我正在尝试在特定位置使用脚本创建多个目录。我不知道这一点,我在这里给出了我迄今为止的尝试 directory_name="/home/usw9bls7/lib1" if [ -d $directory_name ] then echo "Directory already exists" else mkdir $directory_name fi I have to create directory at locations "/home/usw9bls7/confi

我不熟悉shell脚本,我正在尝试在特定位置使用脚本创建多个目录。我不知道这一点,我在这里给出了我迄今为止的尝试

directory_name="/home/usw9bls7/lib1"

if [ -d $directory_name ]
then
echo "Directory already exists"
else
mkdir $directory_name
fi

I have to create directory at locations
"/home/usw9bls7/config1"
"/home/usw9bls7/DNQ/lib1"
"/home/usw9bls7/DNQ/config1"

如果您使用
bash
,请使用大括号展开帮助:

directory_name="/home/usw9bls7/lib1"

if [ -d "$directory_name" ];then
   echo "Directory already exists"
else
    mkdir -p  /home/usw9bls7/{config1,DNQ/lib1,DNQ/config1}/"$directory_name"
fi
示例:使用
echo
命令

echo /home/usw9bls7/{config1,DNQ/lib1,DNQ/config1}
/home/usw9bls7/config1 /home/usw9bls7/DNQ/lib1 /home/usw9bls7/DNQ/config1
便携式POSIX解决方案(在/bin/ksh、/bin/sh和/bin/bash中工作)

这只不过是在你的名字上循环,然后让它们成为你的名字。我添加了
-p
选项,这样它将根据需要无声地创建缺少的父项,如DNQ

请注意,如果这些文件作为文件而不是目录存在,您将从mkdir获得错误。至少你会得到一些东西。

对于这样简单的任务,不要使用“if”语句,使用mkdir的“-p,--parents”创建几个不存在的目录,并忽略现有的目录

使用元字符组合该功能以扩展子文件夹

在本例中,我使用一个命令创建了下一个结构:

-/home
   |---/usw9bls7
          |------- DNQ
                     |---- lib1
                     |---- config1

user@DESKTOP-RR909JI ~
$ mkdir -p /home/usw9bls7/DNQ/{lib1,config1}

user@DESKTOP-RR909JI ~
$ ls -ltr /home/usw9bls7/DNQ/
total 0
drwxr-xr-x+ 1 user user 0 jun. 29 20:17 lib1
drwxr-xr-x+ 1 user user 0 jun. 29 20:17 config1

这些目录以前在我的环境中都不存在(除了/home)。无论如何,如果您想创建脚本,请尝试使用此命令简化操作。

将它们全部传递给
mkdir-p

mkdir -p \
"/home/usw9bls7/config1" \
"/home/usw9bls7/DNQ/lib1" \
"/home/usw9bls7/DNQ/config1" 
如果您非常注重性能,您可以首先从shell测试它们是否存在。以下是我在shell库中所做的工作:

all_eh()
{
    local predic a; predic=$1; shift
    for a; do
        $predic "$a" || return 1
    done
}
mkdir_p() { all_eh 'test -d' "$@" || mkdir -p "$@"; }

如果所有目录都存在,这会更快,因为
test
(或
[
)是一个shell内置(在几乎所有shell中)所以不会花费你通常的1-2MS叉/执行开销。< /P> @ IMATAR请检查我编辑后使用的'-p’作为选项,以<代码> MKDIr < /代码>创建丢失的中间目录。可以复制Hy-Mangek,考虑使用MyKaCARTER和MKDIR的父母来简化事情,我提供了一个例子,希望它对您的PUPO有所帮助。se.get:未找到命令。/test.sh:第8行:意外标记附近的语法错误
fi./test.sh:第8行:
fi'您的行尾可能已损坏。请给出
echo$SHELL
的输出,然后尝试将
!/bin/bash
添加到脚本的第一行。@PS now giving-bash:./test.sh:/bin/ksh^M:错误的解释器:没有这样的文件或di您没有
/home
文件夹吗
all_eh()
{
    local predic a; predic=$1; shift
    for a; do
        $predic "$a" || return 1
    done
}
mkdir_p() { all_eh 'test -d' "$@" || mkdir -p "$@"; }