我不知道我是否正确理解shell脚本中的for句子。 这就是我想要做的事情
#!/bin/bash
echo Shows the numbers from 1 to 100 and their squares
echo
i=1
for (( i = 1; i <= 100; i++ )); do
exp= `expr $i \* $i`
echo "N: $i EXP: $exp"
done
它显示:&#34;语法错误:循环变量错误&#34;
答案 0 :(得分:2)
如果您已将脚本设置为可执行文件:chmod u+x script.sh
并且您将其称为:
$ ./script.sh
该脚本将加载bash作为脚本的解释器
如果您使用的是:sh script.sh
,则可能是您使用的shell是其他内容,如dash,ksh,zsh或其他一些设置,因为shell连接到文件链接/bin/sh.
请检查Bash是执行shell。如果还有问题:
=
之后的空格被shell解释为新单词,将被执行
因此,尝试执行名为4, 9 or 16, etc.
的命令将触发command not found
错误。
这样就行了(不需要使用i=1
,因为它在开始时设置了):
#!/bin/bash
echo "Shows the numbers from 1 to 100 and their squares"
echo
for (( i=1; i<=100; i++ )); do
exp=`expr $i \* $i`
echo "N: $i EXP: $exp"
done
但实际上,在bash中,这将更加惯用:
#!/bin/bash
echo -e "Shows the numbers from 1 to 100 and their squares\n"
for ((i=1; i<=100; i++)); do
echo "N: $i EXP: $(( i**2 ))"
done
答案 1 :(得分:1)
你是如何运行这个脚本的?
您使用的是/bin/sh scriptfile.sh
而不是/bin/bash scriptfile.sh
或/path/to/scriptfile.sh
吗?
因为它看起来像dash
错误,因为dash不支持循环语法算法。