我正在学习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
但我无法让最后一部分工作。有什么建议吗?
答案 0 :(得分:3)
将(( ... ))
用于算术条件:
a=$1
b=$2
if (( a > b )) ; then
echo $a is bigger than $b
exit 1
fi
另请注意,{a..b}
仅适用于文字,因为大括号扩展在变量扩展之前发生。因此,对于变量,您必须使用seq
或for
循环。
答案 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
谢谢大家