Shell脚本不计算文件中的字符,单词,行

时间:2017-12-09 12:38:22

标签: 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
        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

3 个答案:

答案 0 :(得分:1)

变量周围的

引号是正常的,但不要像在此处所做的那样在每个变量周围加上单个引号:

    if [ '$newline' == '$line' ]

要查看失败原因,请查看以下代码,其中淡蓝色文本为代码,并输出粉红色文本:

a=3 
echo $a
  

3

echo '$a'
  

$一个

if [ '$a' == 3 ] ; then echo true ; else echo false ; fi
  

if [ $a == 3 ] ; then echo true ; else echo false ; fi
  

答案 1 :(得分:1)

你知道单引号是做什么的吗?它阻止任何转义,或字符串替换发生。换句话说,它表示原始字符串(您甚至不能在单引号中放入单引号!)。

如果您想在内部进行变量扩展,则应更改为双引号:

if [ "$newline" == "$line" ]
#    ^        ^    ^     ^

答案 2 :(得分:-1)

#!/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}')"