“let”内部shell命令在shell脚本中不起作用?

时间:2011-06-20 10:22:42

标签: shell unix

我做了

a=1234 
let "a=a+1"

在命令行上,没关系。但是当我在shell脚本中执行相同操作时。它打印出一个“让:未找到”的错误。 这是脚本文件。

#!/bin/sh
a=1234;
let "a=a+1";
echo "$a";

谢谢,

8 个答案:

答案 0 :(得分:10)

请勿使用let。使用POSIX arithmetic expansiona=$(($a+1))。这保证可以在任何符合POSIX标准的shell中使用。

答案 1 :(得分:7)

问题可能是/bin/sh与普通shell不同,或者行为与普通shell不同。例如,当bash被调用为/bin/sh时,它会提供其正常功能的子集。

因此,您可能需要更改shebang行以使用不同的shell:

#!/bin/bash

#!/bin/ksh

你不需要在行的末端使用分号。

答案 2 :(得分:3)

见:http://www.hlevkin.com/Shell_progr/hellobash.htm

正确的是:

a=1234;
b=1;
a=`expr $a + $b`;

答案 3 :(得分:2)

您应该使用let a=a+1不带引号

答案 4 :(得分:1)

'$ a = 1234'的'$ a'正在杀死你。

shell执行所有$替换,然后THEN计算表达式。结果它看到“= 1234”,因为$ a没有价值。

使用-x查看此内容。

  bash -x your-script

答案 5 :(得分:0)

在命令行中使用以下命令检查您的实际shell:

echo $ SHELL

它将提供一个shell名称,在脚本的第一行使用而不是/ bin / sh。

答案 6 :(得分:0)

  1. 使用

    检查shell名称

    echo $SHELL

  2. 相应地将脚本的第一行更改为

    #!/bin/bash

    #!/bin/ksh

    而不是#!/bin/sh

答案 7 :(得分:-2)

c=1
d=1
for i in `ls`
do
    if [ -f $i ]
    then
        echo "$c -> $i"
        c=`expr $c + 1`
    fi
done
c=`expr $c - 1`
echo no. of files $c
for i in `ls`
do
    if [ -d $i ]
    then
        echo "$d -> $i"
        d=`expr $d + 1`
    fi
done
d=`expr $d - 1`
echo no. of direcrories $d