用于制作许多目录的Shell脚本

mac*_*389 3 bash shell

我正在尝试创建一个文件层次结构来存储数据.我想为每个数据采集会话创建一个文件夹.该文件夹有五个子文件夹,如下所示.我下面的代码尝试给出了错误,但我不确定如何纠正它.

 #!/bin/sh
 TRACES = "/Traces"
 LFPS = '/LFPS'
 ANALYSIS = '/Analysis' 
 NOTES = '/Notes'
 SPIKES = '/Spikes'

 folders=($TRACES $LFPS $ANALYSIS $NOTES $SPIKES)
 for folder in "${folders[@]}"
  do
    mkdir $folder
  done
Run Code Online (Sandbox Code Playgroud)

错误 我在声明变量时出错.如上所述,bash翻转错误Command not found.相反,如果我将文件名声明为TRACES = $('\Traces'),则bash翻转错误No such file or directory.

mat*_*ata 7

删除变量名称和值之间的空格:

#!/bin/sh
TRACES="/Traces"
LFPS='/LFPS'
ANALYSIS='/Analysis' 
NOTES='/Notes'
SPIKES='/Spikes'

folders=($TRACES $LFPS $ANALYSIS $NOTES $SPIKES)
for folder in "${folders[@]}"
 do
   mkdir $folder
 done
Run Code Online (Sandbox Code Playgroud)

有了空格,bash就像解释一样

COMMAND param1 param2
Run Code Online (Sandbox Code Playgroud)

=asparam1


Jon*_*ler 5

我正在考虑修复的"变量赋值周围没有空格"部分.

使用数组表示法似乎有点矫枉过正.允许名称中可能的空格,您可以使用:

for dir in "$TRACE" "$LFPS" "$NOTES" "$PASS"
do mkdir "$dir"
done
Run Code Online (Sandbox Code Playgroud)

但即便如此也是浪费:

mkdir "$TRACE" "$LFPS" "$NOTES" "$PASS"
Run Code Online (Sandbox Code Playgroud)

如果您担心目录可能存在,则可以使用以下内容避免出现错误消息:

mkdir -p "$TRACE" "$LFPS" "$NOTES" "$PASS"
Run Code Online (Sandbox Code Playgroud)

-p如果路径较长且某些中间目录可能丢失,则该选项也很有用.如果您确定名称中没有空格,则双引号变为可选(但它们是安全且便宜的,因此您可以使用它们).