【问题标题】:Trying to use a nested while loop in bash to print out numbers in an increasing order尝试在bash中使用嵌套的while循环以升序打印数字
【发布时间】:2021-02-17 19:30:57
【问题描述】:

我正在尝试编写一个 bash 脚本,该脚本将接收多行并打印出每一行,并为每个新行添加一个附加数字,直到达到用户指定的行数。

#!/bin/bash



printf "%0s\n" "Enter the number of lines"
read x

n=0
while [ "$n" -lt $x ];
do
        #
        y="$n"
        while [ 0 -le "$y" ];
        do
                printf "$y "
                let y--
        done
        echo 
        let n++
done

x=5 的电流输出:

0 
1 0 
2 1 0 
3 2 1 0 
4 3 2 1 0 

这类似于我想要的。我想要它以相反的顺序。 x = 5 的所需输出:

0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

我玩弄逻辑只是为了得到空白或 printf 错误的无限循环。我是新手,希望能提供任何帮助。

【问题讨论】:

  • 要颠倒数字的顺序,只需将您的代码更改为y0 开头并计数到n,例如:y=0 ; while [ "${y}" -le "${n}" ]; do printf "$y "; let y++; done

标签: linux bash unix while-loop


【解决方案1】:

你可以用更简单的方式来做:

#!/bin/bash

read -p "Enter the number of lines: " x

for (( n = 1; n <= x; n++ )); do
    for (( y = 0; y < n; y++ )); do
        echo -n "$y "
    done
    echo
done

x=5 的输出

0
0 1
0 1 2
0 1 2 3
0 1 2 3 4

我想脚本是不言自明的,但如果您有任何问题,请告诉我。

【讨论】:

  • 虽然我希望是这样,但我应该使用嵌套的 while 循环。我很欣赏这个例子!这确实有助于我理解使其工作所需的逻辑。我仍然可以重做这个以获得解决方案
  • 明白。将for 循环转换为等效的while 循环并不难。祝你好运!
  • 明确一点,for ((x; y; z)); do ...; done 等价于x; while y; do ... z; done
【解决方案2】:

我设法使用@markp-fuso 的评论找到了解决方案。看起来像这样。

#!/bin/bash



printf "%0s\n" "Enter the number of lines"
read x

n=0
while [ "$n" -lt $x ];
do
        #
        y=0
        while [ $y -le "$n" ];
        do
                printf "$y "
                let y++
        done
        echo 
        let n++
done

x = 5 的输出

0 
0 1 
0 1 2 
0 1 2 3 
0 1 2 3 4 

【讨论】:

    猜你喜欢
    • 2015-12-09
    • 2018-05-16
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 2023-04-06
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多