我陷入了一个问题。
./ 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)); 它运作得很好。
感谢输入人员。
答案 0 :(得分:2)
问题在于:
[[$QtyAvailable
在shell脚本[[
中是一个命令令牌本身。因此,此令牌的规则与任何其他规则一样适用。即,你需要空格。所以你应该这样:
[[ $QtyAvailable
在行尾有一个类似的问题 - ]]
需要自立,不能加入其他文本。
原因可以追溯到原始bourne shell的时代。 Bash的[[
只是原始bourne shell的[
命令的扩展。回到t'day,(当所有这些都是田地,我只是一个小伙子,通过口香糖),[
是一个外部命令,它本身是外部test
的象征性链接。
最终[
成为了内置的shell,但是语义(即将[
视为独立命令)仍然保留,因为它需要(至少)向后兼容性所以编写的脚本对于sh内置的内容可以运行在那些没有内置的地方。所以现在我们跳到现在,仍然保持相同的语义。它对bash维护者也有实际的好处:寻找[
或[[
作为独立的令牌是一个简单的练习。引入其他字符作为分隔符,它增加了复杂性(不是很多,但足够)。