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

时间:2012-11-11 18:26:23

标签: 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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

我正在修复修复程序中的“变量赋值周围没有空格”。

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

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

但即使这样也很浪费:

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

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

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

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

答案 2 :(得分:3)

如果文件夹存在与否,您还需要事先进行一些检查。 你也可以随时使用set -x调试shell脚本,你可以使用“mkdir -p”来实现这一目的。

答案 3 :(得分: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字符串中的单词。