首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Bash循环不工作

Bash循环不工作
EN

Stack Overflow用户
提问于 2012-03-14 01:43:36
回答 3查看 1.6K关注 0票数 1

我正在制作一个脚本,需要循环通过一个文件的列表命名,如file1,file2,file3,都命名相同的后缀数字根据用户的输入增加。

所以我做了一个脚本,但是当我输入数字3时,她只在file1上循环,然后就停止了。为什么?

如何让它根据用户的输入循环遍历n个文件?

这是我的脚本:

代码语言:javascript
运行
复制
    #!/bin/bash
    echo "Base name of machines to bring down:"
    read vm
    echo "Number of machines:"
    read num

    COUNTER=0
    while [  $COUNTER -lt $num ]; do
      num=$[$COUNTER+1]
      VBoxManage controlvm $vm$num poweroff
      let COUNTER=COUNTER+1
    done
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-14 01:50:05

使用double paren进行算术:

代码语言:javascript
运行
复制
#!/bin/bash
echo "Base name of machines to bring down:"
read vm
echo "Number of machines:"
read num

let COUNTER=1
while ((  COUNTER <= num )); do
    echo $COUNTER of $num
    let COUNTER=COUNTER+1
done

更新

我修复了脚本,所以计数器从1开始,而不是0。@toninoj似乎想从1开始,但在他的脚本中,他从0开始。

票数 3
EN

Stack Overflow用户

发布于 2012-03-14 01:51:02

while循环的第一行将num设置为1,然后在while循环的底部将COUNTER设置为2,因此它永远不会执行超过一次。所以你想要这样的东西:

代码语言:javascript
运行
复制
    #!/bin/bash
    echo "Base name of machines to bring down:"
    read vm
    echo "Number of machines:"
    read num

    COUNTER=1
    while [  $COUNTER -le $num ]; do          
        VBoxManage controlvm $vm$COUNTER poweroff
        let COUNTER=COUNTER+1
    done
票数 3
EN

Stack Overflow用户

发布于 2012-03-14 01:55:43

我认为这可能是一种更好的方法:

代码语言:javascript
运行
复制
#!/bin/bash


for (( i=1 ; $i <= $1 ; i=i+1 ))   
do
      VBoxManage controlvm $2$i

done

$1是传递给脚本的第一个参数。第二个参数是$2。现在,您可以使用以下命令调用脚本

代码语言:javascript
运行
复制
myscript vlaue vm

其中,当到达$1时,脚本将停止,$2是您的vm参数。

我尝试过使用echo命令

代码语言:javascript
运行
复制
l1zard@Marvin:~/Downloads> ./test.sh 3 maria
VBoxManage controlvm maria0
VBoxManage controlvm maria1
VBoxManage controlvm maria2
VBoxManage controlvm maria3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9689230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档