Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
整型表达式应为BASH脚本IF语句_Bash_Shell_If Statement - Fatal编程技术网

整型表达式应为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 ))