我对 bash 脚本世界非常陌生,需要一些帮助。当我为脚本提供某个命令行输入时,我想将变量加 1;当提供不同的命令行输入时,我想将变量减 1,但我不希望减量低于零。我该怎么办?
我的思考过程有点像这样。我需要一个从零开始的计数器以及某种读取命令行输入的方法。然后两个 if 语句检查输入和计数,如果两者都有效,则进行递增或递减。
count=0
read input
if(input == "in" && count >= 0)
let "count++"
if(input == "out" && count > 0)
let "count--"
echo $count
但我不确定语法,因为我对 bash 很陌生。我走在正确的轨道上吗?任何帮助,将不胜感激。
答案1
请阅读脚本编写基本指南。恐怕您的语法完全错误,这将节省您大量的时间来阅读它,而不是只是尝试随机的事情。我意识到有些语法很晦涩,但你真的非常想在盲目地尝试用一种语言编写之前先阅读它。每种语言都有自己的语法,尝试猜测它是什么不会走得太远。
首先,if
bash 中的语句以 结尾fi
。然后,您需要[ ]
or[[ ]]
而不是if
条件两边的括号。您还需要then
:if [ condition ]; then action; fi
。接下来,let "count++"
尝试增加一个字符串 ( "count++"
),因为它包含在引号中。该>=
运算符在算术上下文中工作,因此在(( ))
块中或与let
或declare
内置函数一起工作,但在内部if
您需要-ge
改为(请参阅 参考资料help test
)。
这是脚本的工作版本:
#!/bin/bash
count=0
read -p "Input:" input
if [[ $input = "in" && $count -ge 0 ]]; then
let count++
elif [[ $input = "out" && $count -gt 0 ]]; then
let count--
fi
echo $count
现在,当然,这实际上不适用于递减,因为您从 的值开始0
,并且脚本只会运行一次。因此,你永远不会遇到输入out
和$count
大于 0 的情况。也许你正在考虑在循环中运行它?
#!/bin/bash
count=0
while true; do
read -p "Input:" input
if [[ $input = "in" && $count -ge 0 ]]; then
let count++
elif [[ $input = "out" && $count -gt 0 ]]; then
let count--
fi
echo "$count"
done
Ctrl它会一直运行,直到你用+杀死它C。