使用while 循环 用read 读取文件内容,直到文件尾部
2016-03-14 15:57
591 查看
使用while循环一次读取文件的一行,直到文件尾部格式如下:
示例:
取得/etc/passwd的用户名及shell
1、取出当前系统上,默认shell为bash的用户
2、显示所有其ID号为偶数的用户
3、显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30的行
4、显示所有其UID和GID均为偶数的用户;
5、显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30且非以“#”开头的行;
本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1750925
while read line; do \\ line 为一个变量,表示读取到一行的字符 循环体 done < /path/to/somefile使用read由标准输入读取数据,放入变量line中,如果读到的数据非空,就进入循环。
示例:
取得/etc/passwd的用户名及shell
#!/bin/bash # IFS=':' ## 改变字段分隔符 while read f1 f2 f3 f4 f5 f6 f7 ## 将读取的各行帐号放入f1-9的变量中 do echo "userName: $f1 ;userShell: $f7" ## 输出变量 done < /etc/passwd或可以通过管道传给{}的指令组如下所示
#!/bin/bash # IFS=':' ## 改变字段分隔符 cat /etc/passwd | { while read f1 f2 f3 f4 f5 f6 f7 ## 将读取的各行帐号放入f1-9的变量中 do echo "userName: $f1 ;userShell: $f7" ## 输出变量 done }练习:
1、取出当前系统上,默认shell为bash的用户
#!/bin/bash # while read line;do if [[ `echo $line | cut -d: -f7` =~ bash$ ]];then echo $line | cut -d: -f1,7 fi done < /etc/passwd或
#!/bin/bash # while read line;do [[ `echo $line | cut -d: -f7` =~ bash$ ]] && echo $line | cut -d: -f1,7 done < /etc/passwd
2、显示所有其ID号为偶数的用户
#!/bin/bash # while read line;do if [[ $[`echo $line | cut -d: -f3`%2] -eq 0 ]];then echo $line | cut -d: -f1,3 fi done < /etc/passwd
3、显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30的行
#!/bin/bash # while read line;do if [ `echo $line | wc -c` -gt 30 ];then echo "`echo $line | wc -c`:$line" fi done < /etc/rc.d/rc.sysinit
4、显示所有其UID和GID均为偶数的用户;
#!/bin/bash # while read line;do if [ $[`echo $line | cut -d: -f3`%2] -eq 0 ] && [ $[`echo $line | cut -d: -f4`%2] -eq 0 ];then echo $line | cut -d: -f1,3-4 fi done < /etc/passwd或
#!/bin/bash # while read line;do userID=`echo $line | cut -d: -f3` groupID=`echo $line| cut -d: -f4` userName=`echo $line| cut -d: -f1` [ $[$userID%2] -eq 0 ] && [ $[$groupID%2] -eq 0 ] && echo "$userName : $userID : $groupID" done < /etc/passwd
5、显示/etc/rc.d/rc.sysinit文件中,其总字符个数大于30且非以“#”开头的行;
#!/bin/bash # while read line;do if [ `echo $line | wc -c` -gt 30 ] && echo $line | grep "^#" ;then echo $line fi done < /etc/rc.d/rc.sysinit
本文出自 “菜鸟日志” 博客,请务必保留此出处http://zkxfoo.blog.51cto.com/1605971/1750925
相关文章推荐
- C# 窗体利用datagrdeview控件导出数据库中的内容为excel
- poj 3732 Conscription(kruscal+最大权森林)(kruscal模板)
- 浅谈iOS开发中方法延迟执行的几种方式(转载)
- Android基础-Toast
- 编译安装PHP7并安装Redis扩展Swoole扩展
- 数据结构与算法面试题80道(35)
- 哈密顿绕行世界问题---hdu2181(全排列问题)
- [ML of Andrew Ng]Week 3 Logistic Regression and Regularization
- 重写比较
- 【2016年Esri开发者大会亮点解析】全新ArcGIS Python API,弥补Web端使用Python空白
- 窗口分割
- spark编程遇到的问题
- javscript巧用对象特性去掉数组重复项并排序
- Java学习之路(一) —— Java命名规范
- bzoj 1058 [ZJOI2007]报表统计(set)
- ubuntu 开机启动的两种方法
- live555 rtsp延时问题
- 多线程中this、Thread.currentThread()和this.currentThread()的区别
- Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: table is not Mapped
- 进程总结