免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yuhongchun
打印 上一主题 下一主题

专家座谈——脚本分享与交流(大奖) [复制链接]

论坛徽章:
0
121 [报告]
发表于 2011-09-28 16:58 |只看该作者
哈哈 路过 留下脚印

论坛徽章:
0
122 [报告]
发表于 2011-09-28 17:52 |只看该作者
很久没进shell论坛了,不小心发现这个贴子,也来一个。
脚本写多了可能自己都记不住什么事情用什么脚本搞定。下面是用于将所有各式各样的零散脚本集中到一个菜单里的脚本,支持N级子菜单:

  1. prog=`basename $0`

  2. if [ $# -lt 1 ]; then
  3.     echo "Useage:  $prog cfgfile"
  4.     echo "Example: $prog list"
  5.     exit 1
  6. fi

  7. awk -F":" -v file=$1 '
  8.         function genarr() {
  9.                 while ((getline < file) > 0) {
  10.                         a_lev = gsub("\t", "", $1);
  11.                         if (a_plev >= a_lev) {
  12.                                 a_suf[a_lev] += 1;
  13.                         } else {
  14.                                 a_suf[a_lev] = 1;
  15.                         }
  16.                         a_plev = a_lev;
  17.                         path[a_lev] = path[a_lev - 1]", "a_suf[a_lev];
  18.                         gItm[path[a_lev]] = $1;
  19.                         gCmd[path[a_lev]] = $2;
  20.                 }
  21.         }

  22.         function title() {
  23.                 print "    Test My Menu";
  24.         }

  25.         function selitm(sItmNo) {
  26.                 if ($0 == "q") {
  27.                         exit 0;
  28.                 }
  29.                 if ($0 < "0" || $0 > sItmNo) {
  30.                         printf "Input number(0-%d):", sItmNo;
  31.                         return 1;
  32.                 }
  33.                 if ($0 == sItmNo) {
  34.                         if (gPath == "") {
  35.                                 exit 0;
  36.                         }
  37.                         match(gPath, ", *[0-9]+$");
  38.                         gPath = substr(gPath, 1, RSTART - 1);
  39.                 }
  40.                 return 0;
  41.         }

  42.         function menu(mPath) {
  43.                 mItmNo = 1;
  44.                 system("clear");
  45.                 title();
  46.                 while (gItm[mPath", "mItmNo]) {
  47.                         printf "    %d. %s\n", mItmNo, gItm[mPath", "mItmNo];
  48.                         mItmNo ++;
  49.                 }
  50.                 printf "    %d. Return\n", mItmNo;
  51.                 printf "Input number(0-%d):", mItmNo;
  52.                 return mItmNo;
  53.         }

  54.         BEGIN {
  55.                 gPath = "";
  56.                 genarr();
  57.                 itmNo = menu(gPath);
  58.         }

  59.         {
  60.                 if (selitm(itmNo) != "0") {
  61.                         next;
  62.                 };
  63.                 tPath = gPath", "$0;
  64.                 if (gCmd[tPath]) {
  65.                         system(gCmd[tPath]);
  66.                 } else if ($0 != itmNo) {
  67.                         gPath = tPath;
  68.                 }
  69.                 itmNo = menu(gPath);
  70.         }
  71. ' -
复制代码
执行时的第一个参数为定义菜单结构的文本文件,样例如下:

  1. 导出数据
  2.         导出全国中心:echo "导出全国中心"
  3.         导出前置:echo "导出前置"
  4. 导入数据
  5.         导入全国中心:echo "导入全国中心"
  6.         导入前置:echo "导入前置"
  7.         检查
  8.                 检查:. local.run luxqq
  9. 移植: echo "check"
复制代码
每个子菜单以tab缩进,菜单项与要执行的命令之间以冒号分隔即可。
完成功能后没做什么优化,欢迎大家指教。

论坛徽章:
6
丑牛
日期:2013-09-17 00:18:40未羊
日期:2013-10-31 12:10:47午马
日期:2013-12-07 01:58:50水瓶座
日期:2013-12-24 22:43:12水瓶座
日期:2014-03-15 21:12:13操作系统版块每日发帖之星
日期:2016-08-07 06:20:00
123 [报告]
发表于 2011-09-29 21:26 |只看该作者
很久没进shell论坛了,不小心发现这个贴子,也来一个。
脚本写多了可能自己都记不住什么事情用什么脚本搞定 ...
zhangjoto 发表于 2011-09-28 17:52



谢谢分享,一般我们写脚本功能介绍都会放WIKI里~

论坛徽章:
0
124 [报告]
发表于 2011-09-29 23:11 |只看该作者
标记下,慢慢研读。

论坛徽章:
2
处女座
日期:2014-10-24 11:12:372015年辞旧岁徽章
日期:2015-03-03 16:54:15
125 [报告]
发表于 2011-10-01 21:42 |只看该作者
已经盖到n楼了

论坛徽章:
0
126 [报告]
发表于 2011-10-01 22:12 |只看该作者
参与。。

论坛徽章:
0
127 [报告]
发表于 2011-10-04 19:10 |只看该作者
刚刚开始看shell...,

论坛徽章:
0
128 [报告]
发表于 2011-10-04 23:22 |只看该作者
支持ing

论坛徽章:
0
129 [报告]
发表于 2011-10-06 18:23 |只看该作者
多多参与。这个活动很好。

论坛徽章:
0
130 [报告]
发表于 2011-10-07 11:34 |只看该作者
本帖最后由 zhujinzz 于 2011-10-07 12:16 编辑
自动改密码
expert1 发表于 2011-09-15 14:09
  1. pwdchars=string.letters + string.digits +'~!@#$%^&*-_=+?'
复制代码
其实可用:
  1. pwdchars=string.letters + string.digits + string.punctuation
复制代码

  1. >>> string.punctuation
  2. '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
复制代码
changepwd函数,调用command(echo $pwd | passwd --stdin $user),相对要简单些,比如:
  1. import os
  2. os.system("echo %s | passwd --stdin %s" % (newpwd,user))
复制代码
来一个bash的:
  1. #!/bin/bash

  2. array=(a b c d e f g h i j k l m n o p q r s t u v w x y z)  ##可按要求更改

  3. user=$1
  4. num=$2

  5. genpwd(){
  6.         for i in `seq 1 $num`
  7.                 do
  8.                         echo -n ${array[$(($RANDOM%${#array[@]}))]}
  9.                 done
  10. }

  11. pwd=`genpwd`
  12. echo $pwd | passwd --stdin $user
  13. echo "User: $user"
  14. echo "Password: $pwd"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP