我做了
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。
-
使用检查外壳名称
echo $SHELL
-
将脚本的第一行相应地更改为
#!/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