我正在尝试计算输入字符串中的字母,数字和特殊字符的数量
用户将键入字符串,然后以*结尾,以完成程序,然后应显示字母数字和特殊字符的数量
到目前为止,我已经有了这个,但是我在第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
答案 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 page,plaintext,PDF使用)。如果使用Linux,则可能已经安装了一个副本。尝试使用命令info bash
(通常显示超文本浏览器(如果已安装))或man bash
(单页文档,但通常相同)。有时候对于初学者来说很难理解,但是您会学到更多关于这种编程语言的信息。
Bash具有许多与普通命令一样工作的内置命令(例如read
,[[
,echo
,printf
等)。他们的帮助在参考手册中,或者可以通过在bash shell中键入help command_name
来显示。
答案 1 :(得分:0)
有关解决方法,请参见my other answer。
您的程序很奇怪。
分配给变量的方式类似于variable=42
(而不是$variable = 42
)
您必须使用$((…))
语法来执行计算
[[ $char == '0-9' ]]
的意思是“当字符正好为0-9
$char
包含程序的单独自变量,而不是输入中的字符。
$othercount = …
的意思是“运行带有在变量$othercount
和=
中指定的变量…
中指定的名称的命令。
要分配给变量名,您不必在变量名前写$
,并且=
前必须没有空格:
my_variable=42
variable_2=$(($my_variable + 8))
echo $my_variable # Prints “50”