Shell脚本,用于计算文件中的字符、单词和行数 #/bin/bash 清楚的 字符=0 字=0 line=`echo-e“\n”` 空格=`echo-e“”` 如果[$#-eq 0] 然后 echo“您没有输入任何行” elif[$#-eq 1] 然后 文件名=$1 读时-n1换行符 做 如果['$newline'=='$line'] 然后 ((line++) elif['$newline'=='$space'] 然后 ((word++) 其他的 ((字符++)) fi 完成
在变量周围加双引号是可以的,但不要像这里那样在每个变量周围加单引号:Shell脚本,用于计算文件中的字符、单词和行数 #/bin/bash 清楚的 字符=0 字=0 line=`echo-e“\n”` 空格=`echo-e“”` 如果[$#-eq 0] 然后 echo“您没有输入任何行” elif[$#-eq 1] 然后 文件名=$1 读时-n1换行符 做 如果['$newline'=='$line'] 然后 ((line++) elif['$newline'=='$space'] 然后 ((word++) 其他的 ((字符++)) fi 完成,bash,shell,Bash,Shell,在变量周围加双引号是可以的,但不要像这里那样在每个变量周围加单引号: #!/bin/bash clear character=0 word=0 line=`echo -e "\n"` space=`echo -e " "` if [ $# -eq 0 ] then echo "You haven't entered any line" elif [ $# -eq 1 ] then filename=$1 while read -n1 newline do
#!/bin/bash
clear
character=0
word=0
line=`echo -e "\n"`
space=`echo -e " "`
if [ $# -eq 0 ]
then
echo "You haven't entered any line"
elif [ $# -eq 1 ]
then
filename=$1
while read -n1 newline
do
if [ '$newline' == '$line' ]
then
((line++))
elif [ '$newline' == '$space' ]
then
((word++))
else
((character++))
fi
done < $filename
echo "No of line =$line"
echo "No of word =$word"
echo "No of character =$character"
fi
要了解失败的原因,请查看以下代码,其中淡蓝色文本为代码,粉色文本为输出:
if [ '$newline' == '$line' ]
三,
一美元
假的
真的
你知道单引号的作用吗?它防止任何转义或字符串替换发生。换句话说,它表示原始字符串(您甚至不能在单个引号内放入单个引号!) 如果要在内部展开变量,则应更改为双引号:
if[“$newline”==“$line”]
# ^ ^ ^ ^
我没有得到欲望输出。任何人都可以帮助!为什么不直接使用wc(1)
?它是核心实用程序的一部分,应该在任何地方都可以使用。这比三次调用awk更有效:readlines words chars<关于OP是想要纯bash
还是shell代码(即需要练习帮助)似乎有些混乱,而不是使用现有的工具。不要对变量使用大写。不要cat
单个文件。引用你的变量。这可以替换为set--$(wc)否决票的原因是什么?它解决了OP的问题,即使它不是最有效的solution@iBug,有趣--通常我引用代码:
,代码,输出:
,输出格式中的内容。这里的颜色似乎更简单。我想看看有什么证据表明SE蓝色代码和粉色文本颜色是相同的事实上,对于色盲来说很难区分。@iBug,似乎证实了这对某些人来说确实是个问题。@iBug,谢谢,但我第一次理解了你的意思。元链接指的是色盲编码员的一般问题,而不是你对英文颜色名称的偏好。你能更正一下吗t我的代码,即使我没有在变量周围使用单个代码,它也不起作用。它应该先计算字符,然后计算行。@uttam,请编辑您的问题,然后在运行时显示新修改的代码和输出。也许这个答案太类似于?@agc not too silimar。解释是我自己写的。我投票支持您,满意。
a=3
echo $a
echo '$a'
if [ '$a' == 3 ] ; then echo true ; else echo false ; fi
if [ $a == 3 ] ; then echo true ; else echo false ; fi
#!/bin/bash
WC=$(cat $1 | wc -mlw)
echo "No of line =$(echo $WC | awk '{print $1}')"
echo "No of word =$(echo $WC | awk '{print $2}')"
echo "No of character =$(echo $WC | awk '{print $3}')"