SHELL脚本读文件

这篇博客介绍了使用Shell脚本读取文件的十二种不同方法,包括`while read LINE`、`while line LINE`等循环结构,并通过函数和时间测量展示了各种方法的执行效率。此外,还提供了如何在当前shell进程中运行脚本并修改环境变量的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先说一下,我用的是这个:

 

以下是sh文件内容

********************************************

#!/bin/sh
FILENAME="$1"

cat $FILENAME | while read LINE
do
        echo "$LINE"

done

********************************************

 

给你写了一个小例子,从一个文件读数据,设置环境变量:
数据文件data.txt包含三行:
aaa
bbb
ccc


------   test.sh   ------
while   read   data;   do
        if   [   $data   =   "ccc "   ];   then
            echo   "[$data] "
            export   TTT= "$data "
        fi
done   <   data.txt
----------------------

运行方式:
.   test.sh
前面加一个点表示在当前shell进程运行,这样可以修改当前环境变量

*******************************************************************

*******************************************************************

*******************************************************************

*******************************************************************

shell读文件的十二种方法(收藏)Shell 2009-11-03 22:52:53 阅读503 评论1 字号:大中小
#!/usr/bin/ksh

#

# SCRIPT: 12_ways_to_parse.ksh.ksh

#

#

# REV: 1.2.A

#

# PURPOSE:  This script shows the different ways of reading

#       a file line by line.  Again there is not just one way

#       to read a file line by line and some are faster than

#       others and some are more intuitive than others.

#

# REV LIST:

#

#       03/15/2002 - Randy Michael

#       Set each of the while loops up as functions and the timing

#       of each function to see which one is the fastest.

#

#######################################################################

#

#       NOTE: To output the timing to a file use the following syntax:

#

# 12_ways_to_parse.ksh file_to_process > output_file_name 2>&1

#

#       The actaul timing data is sent to standard error, file

#       descriptor (2), and the function name header is sent

#       to standard output, file descriptor (1).

#

#######################################################################

#

# set -n  # Uncomment to check command syntax without any execution

# set -x  # Uncomment to debug this script

#

FILENAME="$1"

TIMEFILE="/tmp/loopfile.out"

>$TIMEFILE

THIS_SCRIPT=$(basename $0)

######################################

function usage

{

echo "/nUSAGE: $THIS_SCRIPT  file_to_process/n"

echo "OR - To send the output to a file use: "

echo "/n$THIS_SCRIPT  file_to_process  > output_file_name 2>&1 /n"

exit 1

}

######################################

function while_read_LINE

{

cat $FILENAME | while read LINE

do

        echo "$LINE"

        :

done

}

######################################

function while_read_LINE_bottom

{

while read LINE

do

        echo "$LINE"

        :

done < $FILENAME

}

######################################

function while_line_LINE_bottom

{

while line LINE

do

        echo $LINE

        :

done < $FILENAME

}

######################################

function cat_while_LINE_line 

{

cat $FILENAME | while LINE=`line`

do

        echo "$LINE"

        :

done

}

######################################

function while_line_LINE

{

cat $FILENAME | while line LINE

do

        echo "$LINE"

        :

done

}

######################################

function while_LINE_line_bottom

{

while LINE=`line`

do

        echo "$LINE"

        :

done < $FILENAME

}

######################################

function while_LINE_line_cmdsub2

{

cat $FILENAME | while LINE=$(line)

do

        echo "$LINE"

        :

done

}

######################################

function while_LINE_line_bottom_cmdsub2

{

while LINE=$(line)

do

        echo "$LINE"

        :

done < $FILENAME

}

######################################

function while_read_LINE_FD

{

exec 3<&0

exec 0< $FILENAME

while read LINE

do

        echo "$LINE"

        :

done

exec 0<&3

}

######################################

function while_LINE_line_FD

{

exec 3<&0

exec 0< $FILENAME

while LINE=`line`

do

        echo "$LINE"

        :

done

exec 0<&3

}

######################################

function while_LINE_line_cmdsub2_FD

{

exec 3<&0

exec 0< $FILENAME

while LINE=$(line)

do

        print "$LINE"

        :

done

exec 0<&3

}

######################################

function while_line_LINE_FD

{

exec 3<&0

exec 0< $FILENAME

while line LINE

do

        echo "$LINE"

        :

done

exec 0<&3

}

######################################

########### START OF MAIN ############

######################################

# Test the Input

# Looking for exactly one parameter

(( $# == 1 )) || usage

# Does the file exist as a regular file?

[[ -f $1 ]] || usage

echo "/nStarting File Processing of each Method/n"

echo "Method 1:"

echo "/nfunction while_read_LINE/n" >> $TIMEFILE

echo "function while_read_LINE"

time while_read_LINE >> $TIMEFILE

echo "/nMethod 2:"

echo "/nfunction while_read_LINE_bottom/n" >> $TIMEFILE

echo "function while_read_LINE_bottom"

time while_read_LINE_bottom >> $TIMEFILE

echo "/nMethod 3:"

echo "/nfunction while_line_LINE_bottom/n" >> $TIMEFILE

echo "function while_line_LINE_bottom"

time while_line_LINE_bottom >> $TIMEFILE

echo "/nMethod 4:"

echo "/nfunction cat_while_LINE_line/n" >> $TIMEFILE

echo "function cat_while_LINE_line"

time cat_while_LINE_line >> $TIMEFILE

echo "/nMethod 5:"

echo "/nfunction while_line_LINE/n" >> $TIMEFILE

echo "function while_line_LINE"

time while_line_LINE >> $TIMEFILE

echo "/nMethod 6:"

echo "/nfunction while_LINE_line_bottom/n" >> $TIMEFILE

echo "function while_LINE_line_bottom"

time while_LINE_line_bottom >> $TIMEFILE

echo "/nMethod 7:"

echo "/nfunction while_LINE_line_cmdsub2/n" >> $TIMEFILE

echo "function while_LINE_line_cmdsub2"

time while_LINE_line_cmdsub2 >> $TIMEFILE

echo "/nMethod 8:"

echo "/nfunction while_LINE_line_bottom_cmdsub2/n" >> $TIMEFILE

echo "function while_LINE_line_bottom_cmdsub2"

time while_LINE_line_bottom_cmdsub2 >> $TIMEFILE

echo "/nMethod 9:"

echo "/nfunction while_read_LINE_FD/n" >> $TIMEFILE

echo "function while_read_LINE_FD"

time while_read_LINE_FD >> $TIMEFILE

echo "/nMethod 10:"

echo "/nfunction while_LINE_line_FD/n" >> $TIMEFILE

echo "function while_LINE_line_FD"

time while_LINE_line_FD >> $TIMEFILE

echo "/nMethod 11:"

echo "/nfunction while_LINE_line_cmdsub2_FD/n" >> $TIMEFILE

echo "function while_LINE_line_cmdsub2_FD"

time while_LINE_line_cmdsub2_FD >> $TIMEFILE

echo "/nMethod 12:"

echo "/nfunction while_line_LINE_FD/n" >> $TIMEFILE

echo "function while_line_LINE_FD"

time while_line_LINE_FD >> $TIMEFILE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值