没有找到指令

时间:2012-02-02 13:41:03

标签: linux bash shell

我陷入了一个问题。

./ 212A1.sh:line327:[[10:找不到命令 ...(还有10多个相同的错误,我猜这是由于记录的打印输出。

这是第327行的代码。

if [[$QtyAvailable -eq $lowStockMargin && $QtyAvailable -lt $lowStockmargin]]

一切正常,直到我刚刚打开我的Ubuntu并开始再次运行我的程序。我没有在那条线上编辑任何东西。

#!/ bin / bash 仍然在文件的第一行声明。

提前感谢那些帮助过的人! :)

 read -p $'Please kindly key in the margin for low stock: \033[4m' lowStockMargin
printf '\033[0m'

grep "$1" BookDB.txt |
while IFS=: read Title Author Price QtyAvailable QtySold;
do
    #compare user input with every extracted line with the qtyavailable variable
    if [[ $QtyAvailable -eq $lowStockMargin && $QtyAvailable -lt $lowStockMargin ]]
    then
    #if condition is passed, then print information of the book
    printf "%-50s %-16s %-14s %-15s %-13s %s\n" "$Title" "$Author" "$Price" "$QtyAvailable" "$QtySold" "$(echo $QtySold*$Price | bc)"
    fi
done

我改行了     if(($ QtyAvailable< = $ lowStockMargin)); 它运作得很好。

感谢输入人员。

1 个答案:

答案 0 :(得分:2)

问题在于:

[[$QtyAvailable

在shell脚本[[中是一个命令令牌本身。因此,此令牌的规则与任何其他规则一样适用。即,你需要空格。所以你应该这样:

[[ $QtyAvailable

在行尾有一个类似的问题 - ]]需要自立,不能加入其他文本。

原因可以追溯到原始bourne shell的时代。 Bash的[[只是原始bourne shell的[命令的扩展。回到t'day,(当所有这些都是田地,我只是一个小伙子,通过口香糖),[是一个外部命令,它本身是外部test的象征性链接。

最终[成为了内置的shell,但是语义(即将[视为独立命令)仍然保留,因为它需要(至少)向后兼容性所以编写的脚本对于sh内置的内容可以运行在那些没有内置的地方。所以现在我们跳到现在,仍然保持相同的语义。它对bash维护者也有实际的好处:寻找[[[作为独立的令牌是一个简单的练习。引入其他字符作为分隔符,它增加了复杂性(不是很多,但足够)。