整型表达式应为BASH脚本IF语句
我正在尝试在文本文件中插入名称和数字。为了学习,我写了一篇短文整型表达式应为BASH脚本IF语句,bash,shell,if-statement,Bash,Shell,If Statement,我正在尝试在文本文件中插入名称和数字。为了学习,我写了一篇短文 v= expr $# % 2 echo $v if [ "$v" -eq 0 ]; then i=1 while [ "$i" -lt $# ] do echo "$i $i+1" >> database i=$((i+1)) done echo "User(s) successfully added \n\v" else echo "Argu
v= expr $# % 2
echo $v
if [ "$v" -eq 0 ]; then
i=1
while [ "$i" -lt $# ]
do
echo "$i $i+1" >> database
i=$((i+1))
done
echo "User(s) successfully added \n\v"
else
echo "Arguments are not complete";
fi
当我输入两个参数时,shell输出如下
0 # (The value of variable v)
./myscript: line 3: [: : integer expression expected
Arguments are not complete # (else statement is executed)
当我将第3行(if语句)中的-eq替换为==时,error msg消失了,但if语句仍然没有像我预期的那样执行
0 # (output of variable v)
Arguments are not complete # (else statement is executed)
您需要将变量赋值括在
$(…)
(“命令替换”)中:
在if
语句中,-eq
应该是正确的。另外,为了确保它工作,我将使用双方括号(这可能取决于您使用的shell):
if[${v}-eq 0]];然后
直接的问题是无法使用命令替换来捕获expr
命令的结果:v=$(expr$#%2)
。然而,
expr
不再用于算术;使用算术表达式,就像递增i
一样
v=$(( $# % 2 ))
谢谢,我在IF声明中添加了两个括号,它起了作用。请解释一下if语句中单括号和双括号的区别。我还想阅读传递给脚本的参数。我想以这样的方式来阅读它,例如对于I=1,$($I)应该先读$1(参数)。这里很好地解释了单括号和双括号之间的区别:()您对
for
循环的想法几乎完成了,您只需要一个序列来迭代,您也可以通过命令替换来完成:for I in$(seq 1$);做;完成
v=$(( $# % 2 ))