常用脚本命令集
发表于:2007-07-04来源:作者:点击数:
标签:
如何用脚本实现分割文件[code:1:c7724c2eda]#!/bin/bash if#-ne2;then echo'Usagesplitfilesizeinbytes' exit fi file=1 size=2 if!-ffile;then echofiledoesn'texist exit fi #TODOtestifsizeisavalidinteger filesize=`/bin/ls-lfile|awk'print5'` echofil
如何用脚本实现分割文件[code:1:c7724c2eda]#!/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' [/code:1:c7724c2eda]
如何查找日期为某一天的文件[code:1:c7724c2eda]
#!/bin/sh
# The right of usage, distribution and modification is here by gr
anted 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 [/code:1:c7724c2eda]
如何计算当前目录下的文件数和目录数[code:1:c7724c2eda]
# ls -l * |grep "^-"|wc -l ---- to count files
# ls -l * |grep "^d"|wc -l ----- to count dir [/code:1:c7724c2eda]
如何只列子目录? [code:1:c7724c2eda]
ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)
ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)
[/code:1:c7724c2eda]
如何实现取出文件中特定的行内容 [code:1:c7724c2eda]
如果你只想看文件的前5行,可以使用head命令,
如: head -5 /etc/passwd
如果你想查看文件的后10行,可以使用tail命令,
如: tail -10 /etc/passwd
你知道怎么查看文件中间一段吗?你可以使用sed命令
如: sed -n '5,10p' /etc/passwd 这样你就可以只查看文件的第5行到第10行。
[/code:1:c7724c2eda]
如何查找含特定字符串的文件 [code:1:c7724c2eda]
例如查找当前目录下含有"the string you want find..."字符串的文件:
??$find . -type f -exec grep “the string you want find...” {} ; -print [/code:1:c7724c2eda]
如何列出目录树[code:1:c7724c2eda]
下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力.
??目录树形式如下:
??.
??`----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" [/code:1:c7724c2eda]
如何实现取出文件中特定的列内容 [code:1:c7724c2eda]
我们经常会遇到需要取出分字段的文件的某些特定字段,例如/etc/password就是通过“:”分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
??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个字符或字段 [/code:1:c7724c2eda]
在vim中实现批量加密 [code:1:c7724c2eda]
密码中还是不能带空格,不管了,能加密就好,先这么用着。
============================================================
#!/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]$ [/code:1:c7724c2eda]
$@等特定shell变量的含义 [code:1:c7724c2eda]
在shell脚本的实际编写中,有一些特殊的变量十分有用:
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
[/code:1:c7724c2eda]
如何使程序的执行结果同时定向到屏幕和文件 [code:1:c7724c2eda]
program_name |tee logfile
这样程序执行期间的显示都记录到logfile同时显示到标准输出(屏幕)。 [/code:1:c7724c2eda]
如何用sendmail给系统所有用户送信[code:1:c7724c2eda]
首先在aliases文件里面建立一个alias:
alluser: :include:/etc/mail/allusers
并执行newaliases使之生效,然后在/etc/mail/allusers里面列出所有用户,可以使用下面的命令:
awk -F: '$3 > 100 { print $1 }' /etc/passwd > /etc/mail/allusers[/code:1:c7724c2eda]
如何查找某条命令的相关库文件 [code:1:c7724c2eda]
在制作自己的发行版时经常需要判断某条命令需要哪些库文件的支持,以确保指定的命令在独立的系统内可以可靠的运行。
在Linux环境下通过ldd命令即可实现,在控制台执行:
ldd /bin/ls
即可得到/bin/ls命令的相关库文件列表。 [/code:1:c7724c2eda]
如何使用host命令获得更多信息 [code:1:c7724c2eda]
Host能够用来查询域名,然而它可以得到更多的信息。host -t mx linux.com可以查询出Linux.com的MX记录,以及处理Mail的Host的名字。Host -l linux.com会返回所有注册在linux.com下的域名。host -a linux.com则会显示这个主机的所有域名信息。 [/code:1:c7724c2eda]
如何停止终端多个进程 [code:1:c7724c2eda]
以下是脚本:
??echo "系统当前用户"
??echo "---------------"
??who | awk '{print $2}'
??echo "---------------"
??echo "输入要杀死终端的终端号:"
??read $TTY
??kill -9 ${K}=`ps -t $TTY | grep [0-9] | awk '{print $1}'` [/code:1:c7724c2eda]
天外闲云 回复于:2004-08-06 12:45:05 |
好东西,呵呵,斑斑加精啊,系统管理,杀人灭口,必备良药啊。
|
gunguymadman 回复于:2004-08-10 18:16:50 |
没人看 白帖了 :(
|
llzqq 回复于:2004-08-10 18:40:57 |
好贴,加精!
|
bjgirl 回复于:2004-08-10 18:53:30 |
8错 @_@
|
mofaser 回复于:2004-08-10 21:05:07 |
very good
|
好好先生 回复于:2004-08-10 21:24:24 |
不错,正准备好好学学shell呢。
|
puma_soft 回复于:2004-08-10 21:51:35 |
一看到程序我就兴奋(不要误会:……))^_^,原来Linux可以这样用,无知的人可以很快的满足,^_^,让我试试!
|
puma_soft 回复于:2004-08-11 01:08:48 |
[quote:1df95559f4]如何列出目录树 代码:
下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力. 目录树形式如下: . `----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" [/quote:1df95559f4] 终于在Redhat 9.0下完成了这个shell,因为进入学习Linux不到一周,太费尽了,有点感想和总结,提出来大家批评指正. 1,变量dir是命令,改为dir1 2.提供一个sed的中文学习网址: http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-1/index.shtml http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-2/index.shtml http://www-900.ibm.com/developerWorks/cn/linux/shell/sed/sed-3/index.shtml 3.完成后的代码如下: [quote:1df95559f4] #!/bin/sh # dtree: Usage: dtree [any directory] dir1=${1:-.} (cd $dir1;pwd) find $dir1 -type d -print | sort -f | sed -e"s,[^/]*/\([^/]*\)$,'--\1," -e 's,[^/]*/, |,g' [/quote:1df95559f4] 4.对sed命令的解释: -e"s,[^/]*/\([^/]*\)$,'--\1," 解释如下: s表示替换; s后的逗号表示分割,一般使用/来作为分割符号,,但是由于/表示路径,所以使用逗号; [^/]*/\([^/]*\)$表示 第一个不是字符/([^/], 中间没有字符/(*),但是以字符/结束的最后的字符串, 并使用标记以方便使用\([^/]*\)$; 但是只替换第一个出现的字符串,没有出现g '--\1 表示在标记1的地方进行替换
-e 's,[^/]*/, |,g' 解释如下: [^/]*/ 表示第一个不是/([^/],中间没有/(*),但是以/结束的最后的字符串, g 表示任何地方出现匹配的字符串都替换; 5.感觉Shell有点类似DOS下的bat文件.不知道对不对
6.为什么在redhat 9.0 下 统计文件有问题,必须去掉* ls -l | grep "^-" |wc -l ls -l | grep "^d" | wc -l 我想请问是这条命令本身就是错误还是由于版本的问题,类似当时的MSDOS 和PC DOS的问题,有些命令刚好相反.
请高手指正.
|
sk.net 回复于:2004-08-11 07:09:02 |
好!!!加精。刚学了SHELL,这个对我帮助太大了。
|
GHzht 回复于:2004-08-11 07:20:06 |
好东西,正在琢磨shell,帮助太大了,万分感谢
|
maldinihjw 回复于:2004-08-11 08:46:45 |
好东西!
|
bbfish 回复于:2004-08-11 09:25:48 |
very good
|
spirit312 回复于:2004-08-11 09:48:23 |
哇塞,牛
|
天与无奈 回复于:2004-08-11 11:30:07 |
:em02: 好贴 我顶!!![size=18:b87a53f18b][/size:b87a53f18b]
|
dqwjack 回复于:2004-08-11 11:42:08 |
up!!!!!!!!!!!!!
|
gunguymadman 回复于:2004-08-11 12:51:32 |
[quote:3b6f193d90="puma_soft"]6.为什么在redhat 9.0 下 统计文件有问题,必须去掉* ls -l | grep "^-" |wc -l ls -l | grep "^d" | wc -l 我想请问是这条命令本身就是错误还是由于版本的问题,类似当时的MSDOS 和PC DOS的问题,有些命令刚好相反. [/quote:3b6f193d90]你说的对 ls -l *表示当前文件及下一级的 应该用ls -l 仅当前级 去掉后的就ok了 没有错误
|
clearcase/" target="_blank" >cccjsxg 回复于:2004-08-11 12:58:34 |
不错啊,好东西。
|
puma_soft 回复于:2004-08-11 17:10:14 |
谢谢gunguymadman的回复.
|
lydongkill 回复于:2004-08-11 17:16:07 |
不错!太好了,最近正在学习shell
|
gaotie 回复于:2004-08-11 19:26:48 |
我顶!!!!十分感谢!
|
Linux@初学者 回复于:2004-08-11 20:42:12 |
好,就是看不懂!! :em06: :em06:
|
jiadingjun 回复于:2004-08-11 23:33:27 |
[quote:e5331a6e7f]$find . -type f -exec grep “the string you want find...” {} ; -print [/quote:e5331a6e7f] 讨论: 这儿{}后面是不是应该有个空格然后\,即$find . -type f -exec grep “the string you want find...” {} \; -print
|
bjgirl 回复于:2004-08-11 23:48:49 |
[quote:a7196df2c6="jiadingjun"] 讨论: 这儿{}后面是不是应该有个空格然后\,即$find . -type f -exec grep “the string you want find...” {} \; -print[/quote:a7196df2c6] 是的!
|
javamud 回复于:2004-08-12 08:10:36 |
8错.顶~~~~~~~~~~~~~~
|
wenaking 回复于:2004-08-12 10:39:01 |
不看不知道,好帖
|
xjlyboy 回复于:2004-08-12 11:14:54 |
归类一下这类的资料,提供下载啊,然后大家可以经常更新里面的内容就可以了。
|
jiadingjun 回复于:2004-08-12 16:30:17 |
在solaris 下试了一下按时间查找文件那个脚本,发现不正确。不知道有没有人在其它的linux版本中测试过。
|
thoujean 回复于:2004-08-12 17:19:47 |
great.....
|
jingtuling 回复于:2004-08-12 21:57:47 |
值得大家学习
|
yangbo9229 回复于:2004-08-16 09:39:37 |
好,up
|
bapo 回复于:2004-08-16 09:44:34 |
虽然现在很多看不懂,但还是要顶一下
|
aiwowo 回复于:2004-08-17 08:31:47 |
精贴!!
|
dell_3148228 回复于:2004-08-17 08:47:00 |
真是好东西!!
|
ebao 回复于:2004-08-18 09:41:52 |
强贴,真想一脚把他踢上天, 顶顶顶顶顶顶
|
andrewleading_he 回复于:2004-08-18 18:39:38 |
好东西,收藏了...
|
daliwa 回复于:2004-11-08 22:39:27 |
好东西啊,,找了很久了,谢谢!!!
|
原文转自:http://www.ltesting.net