shell:读取文件的每一行内容并输出

写法一:
----------------------------------------------------------------------------
#!/bin/bash

while read line
do
    echo $line
done < file(待读取的文件)
----------------------------------------------------------------------------

写法二:
----------------------------------------------------------------------------
#!/bin/bash

cat file(待读取的文件) | while read line
do
    echo $line
done
----------------------------------------------------------------------------

写法三:
----------------------------------------------------------------------------
for line in `cat file(待读取的文件)`
do
    echo $line
done
----------------------------------------------------------------------------

说明:
for逐行读和while逐行读是有区别的,如:
$ cat file
aaaa
bbbb
cccc dddd

$ cat file | while read line; do echo $line; done
aaaa
bbbb
cccc dddd

$ for line in $(<file); do echo $line; done
aaaa
bbbb
cccc
dddd

 
== 实践 === 
#! bin/sh
 
#$str='http://images.stylight.de/static/res200/s2870/2870657.1.jpg%0D'
#echo ${str##*fo}
#echo ${str#fo}
while read line
do
   wget -p ${line:0:59}
done < '/root/mysql/mysql.log';
 
 
 
 
 
Shell 脚本中逐行读取文件内容是一种常见且重要的操作,通常使用 `while read` 结构结合输入重定向实现。以下是对该方法的详细解析和示例。 ### 逐行读取文件的基本结构 ```bash while read line do echo "$line" done < filename.txt ``` 上述代码通过将文件 `filename.txt` 的内容作为标准输入传递给 `while read line` 循环,每次循环中变量 `line` 将被赋值为文件一行内容,然后执行循环体内的命令(例如 `echo "$line"`)[^3]。 ### 使用管道符将命令输出作为输入源 除了直接读取文件,还可以将某个命令的输出作为 `read` 循环的输入源: ```bash cat filename.txt | while read line do echo "$line" done ``` 这种形式通过管道符 (`|`) 将 `cat filename.txt` 的输出传递给 `while read line` 循环,同样可以逐行处理文件内容[^1]。 ### 处理包含空格或特殊字符的行 默认情况下,`read` 命令会以空格、制表符等空白字符作为字段分隔符。如果需要保留每行中的所有空白字符,可以使用 `IFS=` 和 `-r` 参数: ```bash while IFS= read -r line do echo "$line" done < filename.txt ``` 其中: - `IFS=` 防止 `read` 删除行首和行尾的空白。 - `-r` 防止反斜杠转义导致的问题[^3]。 ### 示例:比较两个文件求差集 以下脚本展示了如何使用 `while read` 比较两个文件内容将第一个文件中不在第二个文件中出现的行写入第三个文件: ```bash echo "" > $3 while read srcline do doCopy="TRUE" while read dstline do if [ "$srcline" == "$dstline" ]; then doCopy="FALSE" break fi done < $2 if [ "$doCopy" == "TRUE" ]; then echo "mv $srcline tmp" >> $3 fi done < $1 ``` 此脚本通过嵌套的 `while read` 循环遍历两个文件内容根据条件判断是否将某一行写入目标文件[^2]。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值