shell 实例收集(持续增加)

列出包含 123的文件
# find /test  -exec grep "123" -ls {} \;
 

 

今天开始收集一些shell的例子一直增加,当有一定数量的时候再整理;

 

查找某一天的文件
find 只能查找N天内,或者n天前的文件 好像不能固定在某一天,

例如,今天是3月8日 我要查找/www/cacti/scripts 2月28日修改过的所有文件
 find /www/cacti/scripts/|xargs ls -d --full-time|sort -nr -k 6|grep 2010-02-28

date -d "15 days ago" +%Y-%m-%d   得出几天前的。

 



case  break continue 的应用

 

1test.sh
#!/bin/sh
while :;do
echo -n "enter number 1-5:"
read num
        case $num in
        1|2|3|4|5)
        echo "Good you enter 1-5;"
        ;;

        *)
        echo "Wrong not 1-5 number;"
        break
        ;;
        esac
done
 

2test.sh
while :;do
echo -n "enter number 1-5:"
read num
        case $num in
        1|2|3|4|5)
        echo "Good you enter 1-5;"
        ;;

        *)
        echo "Wrong not 1-5 number;continue(y/n)?"
        read CON

                case $CON in
                y|Y|YES|yes)
                continue
                ;;
                *)
                break
                ;;
                esac
        esac

done

__________________________________

创建1000个文件,并按100个为一组进行打包
 

第一步,创建1000个文件
for((i=1;i<=1000;i++));do touch a$i;done
ll > 1000file.txt
 

第二步,打包
#!/bin/bash
i=·sed -n "$1,$2p" 1000file.txt | awk '{print $NF}'·        
/*
sed -n "$1,$2p" 1000file.txt  意思是输出从第几行都第几行的数据 
awk '{print $NF}'   获取行的最后一列
例如 sed -n "1-10p" 1000file.text 意思是打印1-10行
*/
tar zcvf $2.tgz $i


搜索目录的TXT文件,并更改里面的内容。
#!/bin/bash
find /test/whilereadf/ -name "*.txt" |while read f                                 搜索出来并逐个编辑
do
sed -i 's/www.china.com/www.yahoo.com/g' $f                                 替换
done
 

监控硬盘容量并自动邮件报警的shell脚本
 #!/bin/bash
[email protected]
num=` df |awk '{print $5}'|grep -c -E "^[5-9][0-9]|^100"`
#通过df命令查看硬盘使用情况,并通过awk只查看第五个域的内容,再通过grep只筛选以5到9开头的双位数(即50到99之间的任意数)或以100开头的行,最终把匹配的行数赋值给num。 grep的-c选项是用来计算匹配行的行数。
if [ $num -gt 0 ]    #如果num的值大于0
then
df |grep -E "[5-9][0-9]%|100%"|mail -v -s "disk warning" $mail -  #把使用率超过50%的硬盘情况通过邮件发出去。
fi

2. chmod +x checkdisk.sh  添加执行权限
3.crontab -e
   */5 * * * *  /bin/bash /root/check.sh
保存退出

 

--------------------------------------------------------------------------

客户要求修改/home/squid/share/errors/Simplify_Chinese/里所有的错误页面转向到他们自己专用的界面去,七八个节点,几十台服务器,几百个文件,一个一个vi编辑,多可怕。只好现学现卖sed,目前发现两种办法:

1、find+sed
比如这样:
find . -name "*.html" -exec sed -i "s/eht/the/g" {} \;
用exec传输find的结果给sed,{}是集合的意思;
2、sed+grep
比如这样:
sed -i "s/eht/the/g" `grep eht -rl /test`
这个-rl参数,有时间研究一下。
或者这样:
grep "abc" * -R | awk -F: '{print $1}' | sort | uniq | xargs sed -i 's/abc/abcde/g'
awk -F:的意思是指定:为列的分隔符,sort排序,uniq删除重复行,最后用xargs传输大量数据给sed。
 
 
说到xargs,比如曾经有一次/var/spool/clientmqueue目录占用了大量磁盘空间,但其中的文件都是4.0K,数量及其多,单纯用rm,无法达到目的,就得用ls | xargs rm -f才行。
 

 

 

你可能感兴趣的:(shell,职场,休闲)