我正在尝试创建一个文件层次结构来存储数据。我想为每个数据采集会话创建一个文件夹。该文件夹有五个子文件夹,如下所示。我下面的代码尝试给出了错误,但我不确定如何纠正它。
代码
#!/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
。
答案 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
字符串中的单词。