计算输入字符串中特定字符的数量

时间:2019-12-14 13:46:20

标签: linux bash shell if-statement

我正在尝试计算输入字符串中的字母,数字和特殊字符的数量

用户将键入字符串,然后以*结尾,以完成程序,然后应显示字母数字和特殊字符的数量

到目前为止,我已经有了这个,但是我在第21行发现了错误,我认为这是else语句

我得到的确切错误消息是“ ./masher3:第21行:0:未找到命令”

#!/bin/bash

numcount=0
charcount=0
othercount=0

echo "Input string"

for char in $@
do
        if [[  $char == "*" ]]
        then
                break
        elif [[  $char == '0-9' ]]
        then
                $numcount = $numcount + 1
        elif [[ $char == 'A-Z' ]]
        then
                $charcount = $charcount + 1
        else
                $othercount = $othercount + 1 <----- Error on this line
        fi
done

echo $charcount

2 个答案:

答案 0 :(得分:1)

此程序是用纯bash编写的(不调用任何外部程序)。

也请看下面的代码-我添加了更多信息。

#!/bin/bash

# Print the message without going to next line (-n)
echo -n "Your input string: "

# Read text from standard input. ‘-d '*'’ stops
# reading at first ‘*’ character. Remove it to
# terminate on press of key Enter.
# Result is stored in variable $input.
#
# -e enables backspace and other keys.
read -ed '*' input

# Jump to next line
echo

# Fill all counters with zeros
letters=0
digits=0
spaces=0
others=0

# While $input contains some text…
while [[ -n "$input" ]]
do
  # Get the first character
  char="${input:0:1}"
  # Take everything from $input except
  # the first character and store it again
  # in $input
  input="${input:1}"

  # Is the character space?
  if [[ "$char" == " " ]]
  then
    # Increase the $spaces variable by one
    ((spaces++))
  # Else: If the $char after removal of all
  # letters in (english) alphabet is empty string?
  # That will be true when the $char is letter.
  elif [[ -z "${char//[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]/}" ]]
  then
    # Increase $letters
    ((letters++))
  # Else: If the $char …
  # Just the same for digits
  elif [[ -z "${char//[0123456789]/}" ]]
  then
    ((digits++))
  # Else increase the $others variable
  else
    ((others++))
  fi
done

# Show values
echo "Letters:          $letters"
echo "Digits:           $digits"
echo "Spaces:           $spaces"
echo "Other characters: $others"

还打开/下载Bash Reference Manual(可作为single pageplaintextPDF使用)。如果使用Linux,则可能已经安装了一个副本。尝试使用命令info bash(通常显示超文本浏览器(如果已安装))或man bash(单页文档,但通常相同)。有时候对于初学者来说很难理解,但是您会学到更多关于这种编程语言的信息。

Bash具有许多与普通命令一样工作的内置命令(例如read[[echoprintf等)。他们的帮助在参考手册中,或者可以通过在bash shell中键入help command_name来显示。

答案 1 :(得分:0)

有关解决方法,请参见my other answer


您的程序很奇怪。

  • 分配给变量的方式类似于variable=42(而不是$variable = 42

  • 您必须使用$((…))语法来执行计算

  • [[ $char == '0-9' ]]的意思是“当字符正好为0-9

  • $char包含程序的单独自变量,而不是输入中的字符。


$othercount = …的意思是“运行带有在变量$othercount=中指定的变量中指定的名称的命令。

在bash中分配变量

要分配给变量名,您不必在变量名前写$,并且=前必须没有空格:

my_variable=42

variable_2=$(($my_variable + 8))

echo $my_variable # Prints “50”