如何使用case语句来调用函数?

时间:2013-03-22 06:11:51

标签: linux bash shell

您好我已经使用此代码从给定路径中查找.java文件,并从路径到输出文件生成.java文件列表,并计算每个java文件中的选项卡和空格总数。现在我需要在函数中编写两个while循环并在case语句中调用该函数,该怎么做?

代码:

#!/bin/sh
    #
    output=/home/user/Desktop/file-list.txt
    path=/home/user/Desktop
    find $path -type f -name \*.java > $output
    echo "Generating files list..."
    echo "Done"


    while IFS= read file
    do 
        if [ -f "$file" ]; then
            spaces=$(tr -cd '\s' < "$file"  | wc -c);
            echo "$spaces spaces in file $file" >> "/home/user/Desktop/space-count.txt"
        fi
    done < "$output"
    echo "Space Count Done!"



    while IFS= read file
    do 
        if [ -f "$file" ]; then
            tabs=$(tr -cd '\t' < "$file"  | wc -c);
            echo "$tabs tabs in file $file" >> "/home/user/Desktop/tab-count.txt"
        fi
    done < "$output"
    echo "Tab Count Done!"

1 个答案:

答案 0 :(得分:0)

以下是一个案例示例,但可以将该字符的名称传递给该函数 从而消除了对char进行处理的必要性。

function count_char
{
    flist=$1
    ch=$2

    case $ch in
       " ")  chName=space;;
       "\t") chName=tab;;
    esac

    while IFS= read file
    do 
        if [ -f "$file" ]; then
            tot=$(tr -cd $ch < "$file"  | wc -c);
            echo "$tot $chName in file $file" >> "/home/user/Desktop/tab-count.txt"
        fi
    done < "$flist"   
}

# setup code, find command here
# ....

count_char $output " "
count_char $output "\t"