shell 编程实例学习

读取文件的每一行

for line in `cat filename(待读取的文件)`
do
    echo $line
done

如果文本内容如下

1111
2222
3333 4444 5555

那么for循环读取,打印内容如下

1111
2222
3333
4444 
5555

采用while

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

将打印每一行,如下

1111
2222
3333 4444 5555

删除普通空文件

当前目录下 新建 rm_empty_file.sh ,运行后删除当前目录下的空文件
#!/bin/bash

ls > files

for file in `cat files`
do
    if [ ! -s $file ]
    then
        rm -i $file
    fi  
done

rm -rf files
#!/bin/bash

for file in $(ls)
do
    if [ ! -s $file ]
    then
        rm -i $file
    fi
done

这里写图片描述

目录可以自己任意输,所以写了下面程序rm_empty_file2.sh。没有参数 就是当前目录;输入参数目录就是参数目录;错误目录当然会有错误
#!/bin/bash
if [ $# -eq 1 ]
then
        dir=$1 # $1为 ./xx.sh 后面的第一个参数
else
        dir=""
fi
# 目录错误?
for file in $(ls $dir)
do
        filetmp=${dir}${file} #字符串连接
#       echo $filetmp
        if [ ! -s $filetmp ]
        then
                rm -i $filetmp
        fi
done

这里写图片描述

参考:
bash shell命令行选项与修传入参数处理: http://www.jb51.net/article/48686.htm
linux shell 编程 删除空文件 : http://blog.163.com/gaga_blog/blog/static/214068175201211129020225/

查找目录下 大于100字节的文件,显示文件名和其大小

利用ls -l 命令 和 awk命令

#!/bin/bash
# 用逗号隔开文件名 和 文件大小
for files in `ls -l | awk '$5>100 {print $9","$5}'`
do
#echo $files
echo $files | awk -F , '{print $1" "$2}'
done

这里写图片描述
awk命令参考:https://linux.cn/article-3945-1.html
非常好的十道Linux shell脚本面试题:http://www.2cto.com/os/201309/241532.html

3 设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

题目解答:http://www.yjbys.com/bbs/361072.html
Linux下shell脚本判断文件相关属性:http://www.cnblogs.com/lr-ting/archive/2013/02/27/2935449.html

  • test 测试命令
  • echo $? 可以查看上一条执行命令执行是否成功
  • 这题会有还会有权限问题,因为在根目录下创建文件夹

统计c代码量

查看目录下有多少个.c 文件
这里写图片描述

进一步编写如下shell脚本 c.count.sh

#!/bin/bash                                                                     

cfiles=`find . -name "*.c"`                                                     
for file in $cfiles                                                             
do                                                                              
        echo $file                                                              
        #cat $file                                                              
        file_l=`cat $file | wc -l`                                              
        echo $file_l                                                            
done 

在目录下运行
这里写图片描述

shell算数运算
http://blog.csdn.net/taijianyu/article/details/6907288
http://oldboy.blog.51cto.com/2561410/767862
修改脚本

#!/bin/bash
sum_l=0
cfiles=`find . -name "*.c"`
for file in $cfiles
do
    #echo $file
    #cat $file
    file_l=`cat $file | wc -l`
    #echo $file_l
    ((sum_l=$sum_l+$file_l))
done
echo $sum_l

这里写图片描述

空行问题
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值