Bash if语句总是转到else
我刚开始学习Bash脚本,我必须做一个程序,将一个位图图像分隔为两个(图像已损坏),我已经在web上找到了如何编写循环和语句 但我不知道为什么我的if语句总是指向else。 if是模2,等于0 下面是下面的代码Bash if语句总是转到else,bash,scripting,Bash,Scripting,我刚开始学习Bash脚本,我必须做一个程序,将一个位图图像分隔为两个(图像已损坏),我已经在web上找到了如何编写循环和语句 但我不知道为什么我的if语句总是指向else。 if是模2,等于0 下面是下面的代码 #!/bin/sh OUTPUT="$(hexdump -v -e '/1 "%02X\n"' merge.bmp)" echo $OUTPUT vars=0 count=1 touch one touch two for i in $OUTPUT do if (($v
#!/bin/sh
OUTPUT="$(hexdump -v -e '/1 "%02X\n"' merge.bmp)"
echo $OUTPUT
vars=0
count=1
touch one
touch two
for i in $OUTPUT
do
if (($vars%2==0))
then
echo "1"
else
echo "2"
fi
vars=$((vars+count))
done
在终端中,出现以下错误:
./q3.sh: 14: ./q3.sh: 2885%2==0: not found
2
我真的不知道为什么
如果总是打印2
shebang行是错误的,应该是:
#!/bin/bash
((表达式))
是一个bash
扩展,在sh
中不可用。shebang行是错误的,它应该是:
#!/bin/bash
((表达式))
是一个bash
扩展,在sh
中不可用/bin/sh
版本的(())
bash是:
if test $(($vars % 2)) -eq 0; then
echo "1"
...
fi
由于$(())
知道变量名,因此您甚至可以放弃美元并编写
if test $((vars % 2)) -eq 0; then
echo "1"
...
fi
(())
巴什主义的/bin/sh
版本如下:
if test $(($vars % 2)) -eq 0; then
echo "1"
...
fi
由于$(())
知道变量名,因此您甚至可以放弃美元并编写
if test $((vars % 2)) -eq 0; then
echo "1"
...
fi
你在shebang中使用了/bin/sh
,但是(…)
是一种巴什主义。改用/bin/bash
。@BenjaminW。谢谢,但是为什么shebang很重要(现在代码正在工作),但是为什么他现在正在工作?@SnirSudri,/bin/sh
只保证兼容POSIX的shell<代码>$(())
是POSIX标准的一部分,但(())
不是。请参阅@CharlesDuffy谢谢,我将在几分钟后阅读此内容。您在shebang中使用/bin/sh
,但(…)
是一种巴什主义。改用/bin/bash
。@BenjaminW。谢谢,但是为什么shebang很重要(现在代码正在工作),但是为什么他现在正在工作?@SnirSudri,/bin/sh
只保证兼容POSIX的shell<代码>$(())
是POSIX标准的一部分,但(())
不是。请参阅@CharlesDuffy中的“选择您的外壳”部分谢谢,我将在几分钟后阅读此内容