http://www.33220.cn/2011/0321/254.html
如何用脚本实现分割文件
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'
# The right of usage, distribution and modification is here by granted by the author.
# The author deny any responsibilities and liabilities related to the code.
#
OK=0
A=`find $1 -print`
if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fi
if expr $3 == 2 >;/dev/null ; then M=Feb ; OK=1 ; fi
if expr $3 == 3 >;/dev/null ; then M=Mar ; OK=1 ; fi
if expr $3 == 4 >;/dev/null ; then M=Apr ; OK=1 ; fi
if expr $3 == 5 >;/dev/null ; then M=May ; OK=1 ; fi
if expr $3 == 6 >;/dev/null ; then M=Jun ; OK=1 ; fi
if expr $3 == 7 >;/dev/null ; then M=Jul ; OK=1 ; fi
if expr $3 == 8 >;/dev/null ; then M=Aug ; OK=1 ; fi
if expr $3 == 9 >;/dev/null ; then M=Sep ; OK=1 ; fi
if expr $3 == 10 >;/dev/null ; then M=Oct ; OK=1 ; fi
if expr $3 == 11 >;/dev/null ; then M=Nov ; OK=1 ; fi
if expr $3 == 12 >;/dev/null ; then M=Dec ; OK=1 ; fi
if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fi
if expr $OK == 1 >; /dev/null ; then
ls -l --full-time $A 2>;/dev/null | grep "$M $4" | grep $2 ;
else
echo Usage: $0 path Year Month Day;
echo Example: $0 ~ 1998 6 30;
fi
# ls -l * |grep "^d"|wc -l ----- to count dir
ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)
如: head -5 /etc/passwd
如果你想查看文件的后10行,可以使用tail命令,
如: tail -10 /etc/passwd
你知道怎么查看文件中间一段吗?你可以使用sed命令
如: sed -n '5,10p' /etc/passwd 这样你就可以只查看文件的第5行到第10行。
$find . -type f -exec grep “the string you want find...” {} ; -print
目录树形式如下:
.
`----shellp
`----updates
`----wu-ftpd-2.4
| `----doc
| | `----examples
| `----src
| | `----config
| | `----makefiles
| `----support
| | `----makefiles
| | `----man
| `----util
脚本如下:
#!/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"
cut -d: -f 1 /etc/passwd >; /tmp/users
-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段。
当然也可以通过cut取得文件中每行中特定的几个字符,例如:
cut -c3-5 /etc/passwd
就是输出/etc/passwd文件中每行的第三到第五个字符。
-c 和 -f 参数可以跟以下子参数:
N 第N个字符或字段
N- 从第一个字符或字段到文件结束
N-M 从第N个到第M个字符或字段
-M 从第一个到第N个字符或字段
============================================================
#!/bin/bash
# Encrypt file with vim
if (test $# -lt 2) then
echo Usage: decrypt password filename
else
vim -e -s -c ":set key=$1" -c ':wq' $2
echo "$2 encrypted."
fi
============================================================
[weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; done
test2.txt encrypted.
test4.txt encrypted.
test9.txt encrypted.
kick.txt encrypted.
echo "$2 encrypted."
fi
[weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; done
test2.txt encrypted.
test4.txt encrypted.
test9.txt encrypted.
kick.txt encrypted.
too_old.txt encrypted.
too_old_again.txt encrypted.
bg5.txt encrypted.
[weeder@SMTH weeder]$
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
这样程序执行期间的显示都记录到logfile同时显示到标准输出(屏幕)。
alluser: :include:/etc/mail/allusers
并执行newaliases使之生效,然后在/etc/mail/allusers里面列出所有用户,可以使用下面的命令:
awk -F: '$3 >; 100 { print $1 }' /etc/passwd >; /etc/mail/allusers
在Linux环境下通过ldd命令即可实现,在控制台执行:
ldd /bin/ls
即可得到/bin/ls命令的相关库文件列表。
echo "系统当前用户"
echo "---------------"
who | awk '{print $2}'
echo "---------------"
echo "输入要杀死终端的终端号:"
read $TTY
kill -9 ${K}=`ps -t $TTY | grep [0-9] | awk '{print $1}'`
#把以下代码添加到/etc/profile文件内
export HISTTIMEFORMAT="%F %T "
USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`
LOCAL_name=`hostname`
HISTDIR=/var/log/.hist/${LOCAL_name}_`date +%Y%m%d`_auditlog
#判断$USER_IP是否为空,如果为空则使用hostname记录.
if [ -z $USER_IP ]
then
USER_IP=`hostname`
fi
if [ ! -d $HISTDIR ]
then
mkdir -p $HISTDIR
#为$HISTDIR赋值权限,让所有用户都可以访问.
chmod 777 $HISTDIR
fi
if [ ! -d $HISTDIR/${LOGNAME} ]
then
mkdir -p $HISTDIR/${LOGNAME}
chmod 300 $HISTDIR/${LOGNAME}
fi
export HISTSIZE=4096
DT=`date +%Y%m%d"_"%T`
export HISTFILE="$HISTDIR/${LOGNAME}/${USER_IP}_${LOGNAME}_$DT"
chmod 600 $HISTDIR/${LOGNAME}/*.hist* 2>/dev/null