用参数计数

时间:2014-04-13 11:12:10

标签: bash

我正在学习bash脚本,并且在基础知识方面遇到了一些困难。 所以我的第一个练习是制作一个简单的bash脚本,从1到10。

我用

轻松解决了这个问题
for i in {1..10}; do echo $i; done

现在我正在尝试一个更难的方法,即使用参数。

我必须将$ 1分配给“a”,将$ 2分配给“b”,这样我可以将代码用于  {a..b}  而不是

{1..10}

并且能够使用命令

bash scriptname 1 10

例如,让我的脚本计数。

最重要的是,我想添加一个控制机制,确保$ 1值小于$ 2机制,所以我会收到一条错误消息 例如,如果我使用

bash scriptname  8 6

我会收到错误

8 is bigger than 6, please enter a new starting value.

有谁知道如何才能使这项工作?

编辑:

所以我得到了更多。

我得到原始部分与

一起工作
a=$1
b=$2
for((i=a; i<= b; i++)) do echo $i; done

到目前为止一直很好,但是现在我正在尝试添加错误消息,并且在我的脚本说它太大之后能够重新输入$ 1命令。

我正在尝试用

执行此操作
while [a>b]
echo $a is bigger then $b, please enter a new number:
read a done

但我无法让最后一部分工作。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

(( ... ))用于算术条件:

a=$1
b=$2
if (( a > b )) ; then
    echo $a is bigger than $b
    exit 1
fi

另请注意,{a..b}仅适用于文字,因为大括号扩展在变量扩展之前发生。因此,对于变量,您必须使用seqfor循环。

答案 1 :(得分:0)

您可以尝试以下方式:

if [[ $1 -gt $2 ]]; then
    echo "$1 is bigger than $2 !";
    exit 1
fi

或者:

if [ "$1" -gt "$2" ]; then
    echo "$1 is bigger than $2 !";
    exit 1
fi

或者:

if test "$1" -gt "$2"; then
    echo "$1 is bigger than $2 !";
    exit 1
fi

当然,您可以在这样的循环中使用test[[[

while [[ $a -gt $b ]]; do
    echo "$a is bigger than $b !";
    read a
done

请参阅man test以获取有关算术运算符的更多详细信息。

答案 2 :(得分:0)

使用以下代码解决它:

a=$1
b=$2
while [ $b -lt $a]; do
echo “$a is bigger than $b, please enter a new value.”
read a
done
for((i=a; i<=b; i++)) do echo “$i”;
done

谢谢大家