句子问题(shell脚本)

时间:2015-10-16 20:55:26

标签: bash shell for-loop

我不知道我是否正确理解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;

2 个答案:

答案 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不支持循环语法算法。