在 Bash 中嵌套 while 循环构建数据树

在 Bash 中嵌套 while 循环构建数据树

我正在尝试分配多个变量以加载到管道中。我想提示用户输入值,然后将它们读入变量中。我当前的脚本是:

echo "How many galaxies are you analyzing?"
read n1

i=1
while [$i -lt $n1]; do
echo "Please list galaxy $i."
read gal${i}
echo "How many observations are there for gal${i}?"
read n2
while [$j -lt  $n2]
echo "Please enter observation #$j for gal${i}."
read obs${j}
echo gal${i}
echo obs${j}
let j++
done
echo gal${i}
let i+1
done

我希望有一棵树,由

├── gal1
|   ├── obs1
│   └── obs2
├── gal2
│   ├── obs1
│   ├── obs2
│   └──obs3

这些值是任意字母数字组合。

我运行上述循环时遇到的错误是:

user@user:~$ bash tst.tst 
How many galaxies are you analyzing?
2
tst.ts: line 16: syntax error near unexpected token `done'
tst.ts: line 16: `done'

答案1

首先,缩进您的代码,以便更容易查看其逻辑结构(许多编辑器都会为您执行此操作,但如果必须,则值得手动执行):

#!/bin/bash
echo "How many galaxies are you analyzing?"
read n1

i=1
while [[ $i -lt $n1 ]]; do
    echo "Please list galaxy $i."
    read gal${i}
    echo "How many observations are there for gal${i}?"
    read n2
    while [[ $j -lt  $n2 ]] ; do
        echo "Please enter observation #$j for gal${i}."
        read obs${j}
        echo gal${i}
        echo obs${j}
        let j++
    done
    echo gal${i}
    let i+1
done

第二,第一行应该是“ #!/bin/bash”。

第三,line后面while [$j -lt $n2]需要一个。; do

第四,使用每次[都会运行。使用内置命令(和)会更好。 /usr/bin/testbash[[]]

“我希望有一棵树...”。这是一个 SMOP(简单编程问题),您必须按照需要的方式排列数据。但是,当、、等存在时,构建树bash就变得非常困难。perlpythonruby

相关内容