a=1234
let "a=a+1"
在命令行和它的罰款。但是當我在shell腳本中做同樣的事情時。它打印出一個「let:not found」的錯誤。 這是腳本文件。
#!/bin/sh
a=1234;
let "a=a+1";
echo "$a";
感謝,
a=1234
let "a=a+1"
在命令行和它的罰款。但是當我在shell腳本中做同樣的事情時。它打印出一個「let:not found」的錯誤。 這是腳本文件。
#!/bin/sh
a=1234;
let "a=a+1";
echo "$a";
感謝,
的問題很可能是/bin/sh
是不一樣的,或不行爲一樣,正常的外殼。例如,當bash
被調用爲/bin/sh
時,它提供了其正常功能的子集。
所以,你可能需要改變你的家當線使用不同的外殼:
#!/bin/bash
或
#!/bin/ksh
你不需要分號在線路的兩端。
它的是殺了你 '$ a = 1234' 的 '$ A'。
shell執行所有$替換,然後評估表達式。因此它看到「= 1234」,因爲沒有價值$ a。
使用-x來看看這個。
bash -x your-script
對不起,我其實沒有使用$修正我的問題。 – John
在命令行下面的命令來檢查你的實際外殼:
回聲$ SHELL
它將提供一個shell的名字,就用它來的/ bin/sh的在第一線你的腳本。
是的問題是與shebang。我將它改爲#!/ bin/bash(echo $ SHELL打印bash)並且它可以工作。但是,shebang的目的是什麼?我認爲它調用適當的shell來執行腳本。 (我已經在/斌)。還是在bourne shell中不支持let? – John
您應該使用let a=a+1
不帶引號
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
歡迎來到Stack Overflow!雖然這段代碼可能有助於解決這個問題,但它並沒有解釋_why_和/或_how_它是如何回答這個問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 –
使用
echo $SHELL
更改腳本的第一線檢查外殼名稱相應地
#!/bin/bash
或
#!/bin/ksh
,而不是#!/bin/sh
。
您可能正在使用不同的shell - 在腳本開始時是否有shebang行? –
也許使用'a = 1234'?選中這個:'help | grep let'。 – marioosh
'echo $ SHELL' - 它說什麼? – marioosh