gpt4 book ai didi

linux - Bash while if 函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:01 25 4
gpt4 key购买 nike

我正在尝试运行这个 bash 脚本。

#!/bin/sh

MAX=5

j=1

while [ $((1+$j)) -le $MAX ] do

input=$j

if [ $input -le $j ] then
echo "input=$j,$j,$((j+1)),$((j+2)),$((j+3)),$((j+4))"
else
echo "$input"
fi j=$((j+1))

done

我正在编写一个 bash 脚本并尝试检查 shell 值的参数中提供的顺序列表。输出内容为:

 input=1,1,2,3,4,5 
input=2,2,3,4,5,6
input=3,3,4,5,6,7
input=4,4,5,6,7,8

正如我所期望的,它应该在每一行按递增顺序给出列表,但我正在寻找的结果是:

 input=1,2,3,4,5 
input=2,1,3,4,5
input=3,1,2,4,5
input=4,1,2,3,5
input=5,1,2,3,4

请帮助我,谢谢。

最佳答案

在您的脚本中,当您迭代变量 j 时,只有 while 循环会跟踪范围 {1 .. MAX}。因此,如果您在循环中处于 j=5 位置,则在 $j,$((j+1)),$((j+2)),$((j+3)),$((j+4)) 上运行 echo 分别会产生 5,6,7,8,9,这不是您想要的结果。

解决方案的一种方法是,给定数字 i,创建一个范围 {1 .. MAX},并删除 i。例如,给定 i=2,创建列表 1,3,4,...,MAX。然后可以将其连接到最终输出格式,如 echo "input=$i,$list"

以下range例程创建这样一个列表:

# range() outputs a range of numbers 1 to MAX, but with
# the number 'num' removed from the range.
# Usage: range num MAX
# Example: [ input: range 2 5 ] [ output: 1,3,4,5 ]
range() {
num="$1"
MAX="$2"
for i in $(eval echo {1..$MAX}); do
if [ "$num" -eq "$MAX" ]; then
if [ "$i" -eq $((MAX-1)) ]; then
printf "$i"
break
else
printf "$i,"
fi
elif [ "$i" -eq "$MAX" ]; then
printf "$i"
elif [ "$i" -eq "$num" ]; then
continue
else
printf "$i,"
fi
done
printf "\n"
}

然后你的 while 循环就变成了,

j=1
MAX=5

while [ "$j" -le "$MAX" ]; do
list=$(range "$j" "$MAX")
echo "input=$j,$list"
j=$((j+1))
done

其中 list 变量被分配使用 range "$j""$MAX" 创建的范围的值,然后 list 连接到最终输出。

<小时/>

测试:假设上述脚本名为permute

# when j=1 and MAX=5
$ ./permute
input=1,2,3,4,5
input=2,1,3,4,5
input=3,1,2,4,5
input=4,1,2,3,5
input=5,1,2,3,4

# when j=1 and MAX=10
$ ./permute
input=1,2,3,4,5,6,7,8,9,10
input=2,1,3,4,5,6,7,8,9,10
input=3,1,2,4,5,6,7,8,9,10
input=4,1,2,3,5,6,7,8,9,10
input=5,1,2,3,4,6,7,8,9,10
input=6,1,2,3,4,5,7,8,9,10
input=7,1,2,3,4,5,6,8,9,10
input=8,1,2,3,4,5,6,7,9,10
input=9,1,2,3,4,5,6,7,8,10
input=10,1,2,3,4,5,6,7,8,9

关于linux - Bash while if 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35993628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com