"let"内部外壳命令在外壳脚本中不起作用?



我做了

a=1234 
let "a=a+1"

在命令行上,一切都很好。但是当我在shell脚本中执行同样的操作时。它打印出一个错误"let:未找到"。这是脚本文件。

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

谢谢,

不要使用let。使用POSIX算术扩展:a=$(($a+1))。这可以保证在任何符合POSIX的shell中工作。

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

因此,您可能需要更改shebang线以使用不同的外壳:

#!/bin/bash

#!/bin/ksh

行的末尾不需要分号。

请参阅:http://www.hlevkin.com/Shell_progr/hellobash.htm

正确的是:

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

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

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

shell执行所有$替换,然后对表达式求值。结果,它看到了"=1234",因为a美元没有价值。

使用-x可以看到这个。

bash-x您的脚本

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

echo$SHELL

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

  1. 使用检查外壳名称

    echo $SHELL

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

    #!/bin/bash

    #!/bin/ksh

    而不是CCD_ 10。

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

最新更新