我做了
a=1234
let "a=a+1"
在命令行上,没关系。但是当我在shell脚本中执行相同操作时。它打印出一个“让:未找到”的错误。 这是脚本文件。
#!/bin/sh
a=1234;
let "a=a+1";
echo "$a";
谢谢,
答案 0 :(得分:10)
请勿使用let
。使用POSIX arithmetic expansion:a=$(($a+1))
。这保证可以在任何符合POSIX标准的shell中使用。
答案 1 :(得分:7)
问题可能是/bin/sh
与普通shell不同,或者行为与普通shell不同。例如,当bash
被调用为/bin/sh
时,它会提供其正常功能的子集。
因此,您可能需要更改shebang行以使用不同的shell:
#!/bin/bash
或
#!/bin/ksh
你不需要在行的末端使用分号。
答案 2 :(得分:3)
答案 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)
使用
检查shell名称 echo $SHELL
相应地将脚本的第一行更改为
#!/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