Shell 经典实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Thizlinux 系统教程 Shell 经典实例

----------------Milo

经典小shell

1 列目录树的shell

脚本如下:

#!/bin/sh

# dtree: Usage: dtree [any directory]

dir=${1:-.}

(cd $dir; pwd)

find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"

2 while中使用read (file是一个文件)

cat file | while read line

do

echo $line

echo " :: Please input any key(s):c"

str4read=""

while true

do

chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`

str4read=$str4read$chr4read

if [ "$chr4read" = "" ] ;then break; fi

done

echo " :: |$str4read|"

done

3 将多个空格替换为字符

sed 's/[ ][ ]*/ /g'

如果空格与tab共存时用

sed -e 's/[[:space:]][[:space:]]*/ /g' filename

4用脚本实现分割文件

#!/bin/bash

if [ $# -ne 2 ]; then

echo 'Usage: split file size(in bytes)'

exit

fi

file=$1

size=$2

if [ ! -f $file ]; then

echo "$file doesn't exist"

exit

fi

#TODO: test if $size is a valid integer

filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize

let pieces=$filesize/$size

let remain=$filesize-$pieces*$size

if [ $remain -gt 0 ]; then

let pieces=$pieces+1

fi

echo pieces: $pieces

i=0

while [ $i -lt $pieces ];

do

echo split: $file.$i:

dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1

done

echo "#!/bin/bash" > merge

echo "i=0" >> merge

echo "while [ $i -lt $pieces ];" >> merge

echo "do" >> merge

echo " echo merge: $file.$i" >> merge

echo " if [ ! -f $file.$i ]; then" >> merge

echo " echo merge: $file.$i missed" >> merge

echo " rm -f $file.merged" >> merge

echo " exit" >> merge

echo " fi" >> merge

echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge echo " let i=$i+1" >> merge

echo "done" >> merge

chmod u+x merge'

5得到上月未日期,格式为YYYYMMDD

get_lastday_of_lastmonth()

{

yy=`date +%Y`

mm=`date +%m-1|bc`

[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1`

aaa=`cal $mm $yy`

dd=`echo $aaa|awk '{print $NF}'`

echo $yy$mm$dd

}

print $NF的$NF是打印最后一个列。因为awk的内置变量NF是列的总数,而$NF就代表着最后一列

6 实现用backup或tar命令来做目录备份

需要保持两个目录当中的文件以及属组关系不变。子目录结构不变,通过管道控制tar和backup命令,不需要中间的archive,(考虑到速度以及空间的关系)

(cd /source && tar cf - .) |(cd /dest && tar zxfp -)

偶没有 backup 命令,但是 tar 用管道可以,

tar -cf - dir1 | ( cd dir2; tar -xvf - )

搬移大法

more aaa.sh

#计算两个日期间有多少天

#date1,date2:yyyymmdd

#Usage:command date1 date2

str=$1

yy1=`echo $str|cut -c 1-4`

mm1=`echo $str|cut -c 5-6`

dd1=`echo $str|cut -c 7-8`

str=$2

相关文档
最新文档