如何根据命令行输入递增和递减变量?

如何根据命令行输入递增和递减变量?

我对 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

请阅读脚本编写基本指南。恐怕您的语法完全错误,这将节省您大量的时间来阅读它,而不是只是尝试随机的事情。我意识到有些语法很晦涩,但你真的非常想在盲目地尝试用一种语言编写之前先阅读它。每种语言都有自己的语法,尝试猜测它是什么不会走得太远。

首先,ifbash 中的语句以 结尾fi。然后,您需要[ ]or[[ ]]而不是if条件两边的括号。您还需要thenif [ condition ]; then action; fi。接下来,let "count++"尝试增加一个字符串 ( "count++"),因为它包含在引号中。该>=运算符在算术上下文中工作,因此在(( ))块中或与letdeclare内置函数一起工作,但在内部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

相关内容