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

Linux 计算输入字符串中的特定字符数,linux,bash,shell,if-statement,Linux,Bash,Shell,If Statement,我试图计算输入字符串中字母、数字和特殊字符的数量 用户将键入字符串,然后用*结束。程序应显示字母数、数字和特殊字符的计数 到目前为止,我有这个,但我在第21行得到了错误,我认为这是else语句 我得到的确切错误消息是“/masher3:第21行:0:未找到命令” #/bin/bash numcount=0 字符数=0 othercount=0 回显“输入字符串” 对于char-in$@ 做 如果[[$char==“*”]] 然后 打破 elif[[$char=='0-9']] 然后 $numco

我试图计算输入字符串中字母、数字和特殊字符的数量

用户将键入字符串,然后用*结束。程序应显示字母数、数字和特殊字符的计数

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

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

#/bin/bash
numcount=0
字符数=0
othercount=0
回显“输入字符串”
对于char-in$@
做
如果[[$char==“*”]]
然后
打破
elif[[$char=='0-9']]
然后
$numcount=$numcount+1
elif[$char=='A-Z']]
然后
$charcount=$charcount+1
其他的
$othercount=$othercount+1有关解决方案,请参阅


你的程序很奇怪

  • 变量赋值看起来像
    variable=42
    (而不是
    $variable=42

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

  • [[$char=='0-9']]
    表示“当字符正好是
    0-9

  • $char
    包含程序的单独参数,而不是输入中的字符


$othercount=…
表示“使用变量
$othercount
中指定的名称运行命令,参数
=
..

在bash中赋值为变量 当您想要分配给变量名时,您不必在变量名之前写入
$
,并且在
=
之前不必有空格:

my_变量=42
变量_2=$($my_变量+8))
echo$my#变量打印“50”

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

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

!/bin/bash
#打印消息而不转到下一行(-n)
echo-n“您的输入字符串:”
#从标准输入读取文本。“-d'*''停止
#正在读取第一个“*”字符。将其删除为
#按Enter键终止。
#结果存储在变量$input中。
#
#-e启用退格键和其他键。
读取-ed'*'输入
#跳到下一行
回声
#用零填充所有计数器
字母=0
数字=0
空格=0
其他=0
#虽然$input包含一些文本…
而[[-n“$input”]]
做
#获取第一个字符
char=“${input:0:1}”
#从$input获取所有内容,除了
#输入第一个字符并再次存储它
#在$input中
input=“${input:1}”
#是字符空间吗?
如果[[“$char”==”“]]
然后
#将$spaces变量增加1
((空格++))
#Else:如果删除所有后的$char
#英文字母表中的字母是空字符串吗?
#当$char是字母时,这将是正确的。
elif[[-z”${char/[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]/}]
然后
#增加$个字母
((字母++))
#否则:如果$char…
#数字也一样
elif[[-z“${char/[0123456789]/}”]
然后
((数字++))
#否则增加$others变量
其他的
((其他++))
fi
完成
#显示价值
回音“字母:$Letters”
回显“位数:$Digits”
回显“空格:$Spaces”
回显“其他字符:$others”

还可以打开/下载(以、)提供。如果使用Linux,可能已经安装了一个副本。请尝试使用命令
info bash
(如果安装了,通常会显示超文本浏览器)或
man bash
(单页文档,但通常相同)。对于初学者来说,这有时很难理解,但您将了解有关此编程语言的更多信息


Bash有许多内置命令(例如
read
[[
echo
printf
等)它的工作原理与普通命令类似。它们的帮助在参考手册中,或者可以通过在bash shell中键入
help command\u name
来显示。

请列举行,并编辑错误的右行,如果可能的话也编辑错误消息。感谢您是否确实要使用
*
来终止输入?您没有阅读input from stdin。您的程序从参数获取输入。您不能在shell变量赋值中的
=
周围放置空格(语法不允许)。shell算法类似于
numcount=$((numcount+1))
--看,我再也没有收到错误了,但它只是说它是0,所以我会这样做。/program HELLO*然后它运行并说输入字符串,然后0@h7989我将以单独的答案向您发送我的解决方案。您的程序非常奇怪。感谢您的答案在那里,以便获得它,因此退格不算作输入。请等待5分钟,我将添加注释。注释在塞特。别忘了点击✓ 按钮将此标记为正确答案。欢迎使用堆栈溢出。:-)谢谢您的回答,但我如何适应退格,因为如果我退格,我会得到^?您真的想用
*
结束输入吗?
Enter
键会更好,而且不会出现此类问题(从
read
命令中删除
-d'*'
部分)。
#!/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