首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash时间if函数

Bash时间if函数
EN

Stack Overflow用户
提问于 2016-03-14 16:59:02
回答 1查看 121关注 0票数 0

我试着运行这个bash脚本。

代码语言:javascript
复制
#!/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值的参数中提供的订单列表。输出的内容如下:

代码语言:javascript
复制
 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

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

代码语言:javascript
复制
 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

请帮帮我,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 19:11:09

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

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

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

代码语言:javascript
复制
# 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"
}

然后你的Then循环变成,

代码语言:javascript
复制
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,则为

代码语言:javascript
复制
# 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35993628

复制
相关文章

相似问题

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