免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 25021 | 回复: 48
打印 上一主题 下一主题

常用脚本命令集 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-06 12:40 |只看该作者 |倒序浏览
如何用脚本实现分割文件
  1. #!/bin/bash

  2. if [ $# -ne 2 ]; then
  3.         echo 'Usage: split file size(in bytes)'
  4.         exit
  5. fi

  6. file=$1
  7. size=$2

  8. if [ ! -f $file ]; then
  9.         echo "$file doesn't exist"
  10.         exit
  11. fi

  12. #TODO: test if $size is a valid integer

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

  15. let pieces=$filesize/$size
  16. let remain=$filesize-$pieces*$size
  17. if [ $remain -gt 0 ]; then
  18.         let pieces=$pieces+1
  19. fi
  20. echo pieces: $pieces

  21. i=0
  22. while [ $i -lt $pieces ];
  23. do
  24.         echo split: $file.$i:
  25.         dd if=$file of=$file.$i bs=$size count=1 skip=$i
  26.         let i=$i+1
  27. done

  28. echo "#!/bin/bash" >; merge

  29. echo "i=0" >;>; merge
  30. echo "while [ $i -lt $pieces ];" >;>; merge
  31. echo "do" >;>; merge
  32. echo " echo merge: $file.$i" >;>; merge
  33. echo " if [ ! -f $file.$i ]; then" >;>; merge
  34. echo " echo merge: $file.$i missed" >;>; merge
  35. echo " rm -f $file.merged" >;>; merge
  36. echo " exit" >;>; merge
  37. echo " fi" >;>; merge
  38. echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >;>; merge
  39. echo " let i=$i+1" >;>; merge
  40. echo "done" >;>; merge
  41. chmod u+x merge'
复制代码


如何查找日期为某一天的文件

  1. #!/bin/sh
  2. # The right of usage, distribution and modification is here by granted by the author.
  3. # The author deny any responsibilities and liabilities related to the code.
  4. #
  5. OK=0
  6. A=`find $1 -print`
  7. if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fi
  8. if expr $3 == 2 >;/dev/null ; then M=Feb ; OK=1 ; fi
  9. if expr $3 == 3 >;/dev/null ; then M=Mar ; OK=1 ; fi
  10. if expr $3 == 4 >;/dev/null ; then M=Apr ; OK=1 ; fi
  11. if expr $3 == 5 >;/dev/null ; then M=May ; OK=1 ; fi
  12. if expr $3 == 6 >;/dev/null ; then M=Jun ; OK=1 ; fi
  13. if expr $3 == 7 >;/dev/null ; then M=Jul ; OK=1 ; fi
  14. if expr $3 == 8 >;/dev/null ; then M=Aug ; OK=1 ; fi
  15. if expr $3 == 9 >;/dev/null ; then M=Sep ; OK=1 ; fi
  16. if expr $3 == 10 >;/dev/null ; then M=Oct ; OK=1 ; fi
  17. if expr $3 == 11 >;/dev/null ; then M=Nov ; OK=1 ; fi
  18. if expr $3 == 12 >;/dev/null ; then M=Dec ; OK=1 ; fi
  19. if expr $3 == 1 >;/dev/null ; then M=Jan ; OK=1 ; fi
  20. if expr $OK == 1 >; /dev/null ; then
  21. ls -l --full-time $A 2>;/dev/null | grep "$M $4" | grep $2 ;
  22. else
  23.   echo Usage: $0 path Year Month Day;
  24.   echo Example: $0 ~ 1998 6 30;
  25. fi
复制代码

如何计算当前目录下的文件数和目录数

  1. # ls -l * |grep "^-"|wc -l ---- to count files
  2. # ls -l * |grep "^d"|wc -l ----- to count dir
复制代码

如何只列子目录?

  1. ls -F | grep /$ 或者 alias sub = "ls -F | grep /$"(linux)

  2. ls -l | grep "^d" 或者 ls -lL | grep "^d" (Solaris)
复制代码

如何实现取出文件中特定的行内容

  1. 如果你只想看文件的前5行,可以使用head命令,
  2. 如: head -5 /etc/passwd

  3. 如果你想查看文件的后10行,可以使用tail命令,
  4. 如: tail -10 /etc/passwd

  5. 你知道怎么查看文件中间一段吗?你可以使用sed命令
  6. 如: sed -n '5,10p' /etc/passwd 这样你就可以只查看文件的第5行到第10行。
复制代码

如何查找含特定字符串的文件

  1. 例如查找当前目录下含有"the string you want find..."字符串的文件:
  2. ??$find . -type f -exec grep “the string you want find...” {} ; -print
复制代码

如何列出目录树

  1. 下面的短小的shell程序可以列出目录树, 充分利用了sed强大的模式匹配能力.
  2. ??目录树形式如下:
  3. ??.
  4. ??`----shellp
  5. ??`----updates
  6. ??`----wu-ftpd-2.4
  7. ??| `----doc
  8. ??| | `----examples
  9. ??| `----src
  10. ??| | `----config
  11. ??| | `----makefiles
  12. ??| `----support
  13. ??| | `----makefiles
  14. ??| | `----man
  15. ??| `----util
  16. ??脚本如下:
  17. ??#!/bin/sh
  18. ??# dtree: Usage: dtree [any directory]
  19. ??dir=${1:-.}
  20. ??(cd $dir; pwd)
  21. ??find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"
复制代码

如何实现取出文件中特定的列内容

  1. 我们经常会遇到需要取出分字段的文件的某些特定字段,例如/etc/password就是通过“:”分隔各个字段的。可以通过cut命令来实现。例如,我们希望将系统账号名保存到特定的文件,就可以:
  2. ??cut -d: -f 1 /etc/passwd >; /tmp/users
  3. ??-d用来定义分隔符,默认为tab键,-f表示需要取得哪个字段。
  4. ??当然也可以通过cut取得文件中每行中特定的几个字符,例如:
  5. ??cut -c3-5 /etc/passwd
  6. ??就是输出/etc/passwd文件中每行的第三到第五个字符。
  7. ??-c 和 -f 参数可以跟以下子参数:
  8. ??N 第N个字符或字段
  9. ??N- 从第一个字符或字段到文件结束
  10. ??N-M 从第N个到第M个字符或字段
  11. ??-M 从第一个到第N个字符或字段
复制代码

在vim中实现批量加密

  1. 密码中还是不能带空格,不管了,能加密就好,先这么用着。

  2. ============================================================
  3. #!/bin/bash
  4. # Encrypt file with vim

  5. if (test $# -lt 2) then
  6.     echo Usage: decrypt password filename
  7. else
  8.     vim -e -s -c ":set key=$1" -c ':wq' $2
  9.     echo "$2 encrypted."
  10. fi
  11. ============================================================
  12. [weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; done
  13. test2.txt encrypted.
  14. test4.txt encrypted.
  15. test9.txt encrypted.
  16. kick.txt encrypted.
  17.     echo "$2 encrypted."
  18. fi
  19. [weeder@SMTH weeder]$ for file in *.txt ; do encrypt test $file ; done
  20. test2.txt encrypted.
  21. test4.txt encrypted.
  22. test9.txt encrypted.
  23. kick.txt encrypted.
  24. too_old.txt encrypted.
  25. too_old_again.txt encrypted.
  26. bg5.txt encrypted.
  27. [weeder@SMTH weeder]$
复制代码

$@等特定shell变量的含义

  1. 在shell脚本的实际编写中,有一些特殊的变量十分有用:
  2. $# 传递到脚本的参数个数

  3. $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个

  4. $$ 脚本运行的当前进程ID号

  5. $! 后台运行的最后一个进程的进程ID号

  6. $@ 与$#相同,但是使用时加引号,并在引号中返回每个参数

  7. $- 显示shell使用的当前选项,与set命令功能相同

  8. $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
复制代码

如何使程序的执行结果同时定向到屏幕和文件

  1. program_name |tee logfile
  2. 这样程序执行期间的显示都记录到logfile同时显示到标准输出(屏幕)。
复制代码

如何用sendmail给系统所有用户送信

  1. 首先在aliases文件里面建立一个alias:
  2. alluser: :include:/etc/mail/allusers
  3. 并执行newaliases使之生效,然后在/etc/mail/allusers里面列出所有用户,可以使用下面的命令:
  4. awk -F: '$3 >; 100 { print $1 }' /etc/passwd >; /etc/mail/allusers
复制代码

如何查找某条命令的相关库文件

  1. 在制作自己的发行版时经常需要判断某条命令需要哪些库文件的支持,以确保指定的命令在独立的系统内可以可靠的运行。
  2. 在Linux环境下通过ldd命令即可实现,在控制台执行:
  3. ldd /bin/ls
  4. 即可得到/bin/ls命令的相关库文件列表。
复制代码

如何使用host命令获得更多信息

  1. Host能够用来查询域名,然而它可以得到更多的信息。host -t mx linux.com可以查询出Linux.com的MX记录,以及处理Mail的Host的名字。Host -l linux.com会返回所有注册在linux.com下的域名。host -a linux.com则会显示这个主机的所有域名信息。
复制代码

如何停止终端多个进程

  1. 以下是脚本:
  2. ??echo "系统当前用户"
  3. ??echo "---------------"
  4. ??who | awk '{print $2}'
  5. ??echo "---------------"
  6. ??echo "输入要杀死终端的终端号:"
  7. ??read $TTY
  8. ??kill -9 ${K}=`ps -t $TTY | grep [0-9] | awk '{print $1}'`
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2004-08-06 12:45 |只看该作者

常用脚本命令集

好东西,呵呵,斑斑加精啊,系统管理,杀人灭口,必备良药啊。

论坛徽章:
0
3 [报告]
发表于 2004-08-10 18:16 |只看该作者

常用脚本命令集

没人看  白帖了    :(

论坛徽章:
0
4 [报告]
发表于 2004-08-10 18:40 |只看该作者

常用脚本命令集

好贴,加精!

论坛徽章:
0
5 [报告]
发表于 2004-08-10 18:53 |只看该作者

常用脚本命令集

8错 @_@

论坛徽章:
0
6 [报告]
发表于 2004-08-10 21:05 |只看该作者

常用脚本命令集

very good

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2004-08-10 21:24 |只看该作者

常用脚本命令集

不错,正准备好好学学shell呢。

论坛徽章:
0
8 [报告]
发表于 2004-08-10 21:51 |只看该作者

常用脚本命令集

一看到程序我就兴奋(不要误会:……))^_^,原来Linux可以这样用,无知的人可以很快的满足,^_^,让我试试!

论坛徽章:
0
9 [报告]
发表于 2004-08-11 01:08 |只看该作者

常用脚本命令集

如何列出目录树
代码:

下面的短小的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"

终于在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.完成后的代码如下:
#!/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'

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的问题,有些命令刚好相反.

请高手指正.

论坛徽章:
0
10 [报告]
发表于 2004-08-11 07:09 |只看该作者

常用脚本命令集

好!!!加精。刚学了SHELL,这个对我帮助太大了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP