3

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

代码

 #!/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

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

4

4 回答 4

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

使用空格,bash将其解释为

COMMAND param1 param2

=作为param1

于 2012-11-11T18:29:50.900 回答
5

我将修复的“变量分配周围没有空格”部分作为给定的。

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

for dir in "$TRACE" "$LFPS" "$NOTES" "$PASS"
do mkdir "$dir"
done

但即使这样也很浪费:

mkdir "$TRACE" "$LFPS" "$NOTES" "$PASS"

如果您担心目录可能存在,您可以通过以下方式避免错误消息:

mkdir -p "$TRACE" "$LFPS" "$NOTES" "$PASS"

-p如果路径较长并且可能缺少某些中间目录,该选项也很有价值。如果您确定名称中不会有空格,则双引号成为可选的(但它们安全且便宜,因此您不妨使用它们)。

于 2012-11-11T19:00:59.593 回答
3

此外,如果文件夹存在或不存在,您还需要事先检查。您也可以随时使用 set -x 调试 shell 脚本,您可以使用“mkdir -p”来解决问题。

于 2012-11-11T18:37:49.630 回答
2

我进行了以下更改以使您的脚本运行。

作为评论评论,创建挂在根文件系统之外的此类文件夹是不寻常的。

#!/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

从初始变量分配中删除了空格,我还简化了 for 循环,以便迭代folders字符串中的单词。

于 2012-11-11T18:33:38.447 回答