sunshine217 2007-11-4 12:09
集linux,windows脚本优点于一身的绿色shell,(自已改的bash)建议置顶。
看到大家还在黑暗中使用脚本技术,我想出来说几句。4r6j?,N'|1C i.H^
我对几个常见的脚本作一个罗列,指出它们的优缺点,然后发一个我原创的shell。V&Upy1owL3P
C3^R~ wC
脚本有很多优点,主要在于它不用编译,编写完即可执行。可以做很多系统管理方面的工作。
pd`WFVp
-------------------------------------------------------------------------------------------------------------------------UY/_%w0L/q/f
cmd-shell: 这是windows自带的脚本,只要你使用开始->运行,cmd,即可打开,可编写.bat脚本。缺点是实在是太弱了,对命令结果的赋值,对变量的计算,加减除等,支持都不好,没有while,do,for等循环。一句话,很弱。
;t`nJ;C@#w
优点是不用安装(这个很重要)
{'Y szc*C4z3^/W
-------------------------------------------------------------------------------------------------------------------------
y
Py)S_R
vbscript: 也是widnows自带的脚本。这个功能强一点,而且也可以执行cmd-shell这个脚本的命令。编写的是.vbs为后缀的脚本。支持变量赋值,循环等等。另外也有正则表达式,(这个很重要),应当说非常不错,缺点可能是速度不是很理想。对于它的使用,我想提两点,其一是你可以在cmd-shell里使用它。可以这样:C:\Documents and Settings\Administrator>cscript.exe 文件名.vbs [参数列表] .'y+ldbZym!W
其二,vbscript是可以截获cmd命令输出的,这个恐怕很多人不知道,我们以截获ipconfig /all 输出为例。
5V8rp}0zE~L
h-r!N!E0q
[font=宋体]Set objShell = CreateObject("WScript.Shell")D;f#d9J/ut]u
Set objWshScriptExec = objShell.Exec("ipconfig /all")
f,I!oz+aq
r
Set objStdOut = objWshScriptExec.StdOut
5`G/Q5?Q}r1J/CZ
//以下是一行一行[/font][font=宋体]读取,[/font]@/KiS)hzZr"t
[font=宋体]While Not objStdOut.AtEndOfStreamW`#RS}O(yA1F
strLine = objStdOut.ReadLine
zEKIo ['y
R@8B
WScript.Echo strLine%\|-[PU K%B.A
Wend
@
|D0G]
O.W f
//也可以一下子全部读取。
1H*S x9J:sQ+GK}{_
[/font]Do While NotobjExecObject.StdOut.AtEndOfStream
-_6`s]N;NW[
strText = objExecObject.StdOut.ReadAll()G*k:vSu8uR?|
loop
u SVR!C_#\
msgbox strTexts3d%L5u'xb.L?3y
jY'AFR)s7k
有了这个技巧,实际上你可以把vbscript脚本和cmd-shell脚本这两种技术的优点全部合在一起了,GM'n8sO+l
从而形成一股合力。做你想做的任何事情。^h y/}+G
-------------------------------------------------------------------------------------------------------------------------
Y'EFZ'O)[n0T
[size=14px]Services For Unix (SFU): [/size]可以让你使用unix/linx下的命令行来进行管理,但是这个很麻烦,暴大,而且要安装到ntfs格式中,以前是要钱的,现在不要钱了,
%O7[+TR2P1a
很多人问这个玩意的下载地址,这里我给一个吧,应该是最新的版本:4\e2nz8g,~M
[b]SFU下载地址[/b]
.]\,].@4C*N uCa
E0DO;F1|3^Xx7h
Microsoft® Windows® Services for UNIX (SFU) 3.5允许Windows和UNIX的计算机之间共享数据、安全信任。
nq:Xi(j{
n,Pw6Fb-q@kEta
[url=http://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/SFU35SEL_EN.exe]http://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/SFU35SEL_EN.exe[/url]&T
Kg&VP#b{b
en)gW g2Q'g.{
但是这个玩意你要准备好被它玩的准备。缺点不用说,需要安装,(本人非常讨厌需要安装而且块头又大的东西。)xX#X5\ K:G
\e iy9n%U9J t @%w
写不完了,下一贴继续。
g0g7cN3l9AOv
5cB/k5Y)?
[[i] 本帖最后由 sunshine217 于 2007-11-6 21:18 编辑 [/i]]
sunshine217 2007-11-4 12:48
-------------------------------------------------------------------------------------------------------------------------
C\4zoe|E$q8du
powershell: 这是下载地址: [url=http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&]http://www.microsoft.com/downloa ... splaylang=zh-cn&[/url];FamilyID=C6EF4735-C7DE-46A2-997A-EA58FDFCBA63
*X[
AD_2t'_H\U
这个我没用过,不好评价,但是如果它需要安装,我想也不用考虑了。这也是微软整出来的玩意,所以总体感觉是微软的平台前后兼容性暴差。一会整一个一会整一个,前后缺乏连续性与一致性。2Vj|&c]YHj
Wsbw
ONV.F1_~8e
------------------------------------------------------------------------------------------------------------------------- t?2c#\Q;Q)[
G
win-bash: 这是linux下的shell:bash, 被移植到windows下的产物,它只有单个win-bash.exe文件,不用安装,双击即可打开,进行交互式使用,当然也可以编写xx.sh的脚本,让win-bash来执行它。win-bash实际上是一个命令解释器,非常强劲,大小也控制得很好,大约只有3M. 它支持linux-bash的一切语法特点, 比如说 if [ $a -gt $b], do,for,while循环,命令替换,判断,逻辑等等。如果你要使用它,可以跟我待会给出的unx-utility 工具包一起使用。这样就支持 gawk,sed,grep,ls,head,tail,等等数十个linux命令了。win-bash实际上是sourceforge.net的一个开源项目,你可以从以下地址下载到它。c]N
~pn
[url=http://sourceforge.net/projects/win-bash/]http://sourceforge.net/projects/win-bash/[/url]
f
_Q.d.kkQ
缺点:不支持中文(这下傻掉了吧?), 这是个致使伤,因为你的脚本中或多或少都要用到中文的吧,它是把中文当作控制字符来解析的,故总是失败。但是它是个开源项目,有源码,你可以试着加入unicode或utf-8 的字符集支持,然后重新编译。如果你想学习如何编写shell,这个源码也是个很好的起点。另外,它使用的bash版本是1.x的,比较低。
n*a-x&L+l0zYL4A
8l cE2JS/PU7X3G$p*?
-------------------------------------------------------------------------------------------------------------------------D7|
w/CBF.E"S|
kjdcc的bash:这是kjdcc的bash项目,你可能很难下载到它,不过还好,我有,这里就传上来吧,不大。而且它是用bash2.04编译的。我是从它的项目文件中提取出来的。
E9D#C)e;T+K8H
优点:跟win-bash一样,缺点也一样。不支持中文。
7?8DfuvC6`-v,s
?
U&bE$Ie I8Zevb
[[i] 本帖最后由 sunshine217 于 2007-11-6 21:19 编辑 [/i]]
sunshine217 2007-11-4 12:52
要提一下它的使用方法,解包,在bin目录下有个bash.exe,双击,即可使用。
8^lAtk(y(P
也可以这样: 在cmd-shell 下,c:\> bash 你编写的shell脚本.sh, 回车,即可使用。这里假定你已经把bash.exe的路径加入了PATH参数。
/v/]"TqU
[2GaqU$K1X)j0g6w+^
还没完,有空接着写,接着发。
sunshine217 2007-11-6 12:51
总共7个包,约12M.
sunshine217 2007-11-6 12:53
no2
mwpq 2007-11-6 12:54
请问是您原创的文章以及shell?
E0[Lk+?FG
除了菊花论坛还在什么地方发表过?2BUR4G|g,M*J
谢谢分享!
sunshine217 2007-11-6 13:00
是原创文章,都是自己弄的,这个我刚做好,测试完毕,,在菊花是首发。其它论坛还没发过呢。
u'qu:x(c_*]
因为我在这里辈份较高,所以在这里发,看反响吧,如果不错的话,还会做一些后续工作。
sunshine217 2007-11-6 13:01
[attach]188570[/attach]
sunshine217 2007-11-6 13:02
[attach]188571[/attach]
sunshine217 2007-11-6 13:06
[attach]188572[/attach]
sunshine217 2007-11-6 13:09
[attach]188573[/attach]
sunshine217 2007-11-6 13:10
[attach]188574[/attach]
sunshine217 2007-11-6 13:12
[attach]188575[/attach]
sunshine217 2007-11-6 13:14
[attach]188576[/attach]
sunshine217 2007-11-6 13:16
发完了。1}} z/WNq1a7Z
我还有一个mini版的,约7-8M,看看大家反应再决定发不发吧。
铁牛阳光 2007-11-6 13:47
试用了一下,坦白说,还是挺不错的。
;Y;CMa'w*eda4L
B9b6o/c7@3\a6x e
就是别扭,而且不是特灵活,譬如ps命令的执行就有一点点问题
sunshine217 2007-11-6 15:28
贴个图吧,
\|_+f6XJ-U6i5v.Vo
不知不是特别灵活是什么意思呢?执行速度吗?它的执行速度飞快啊。
I"@*n1y&x8F7{c
ps这个命令给出的结果是不全,这也没办法。sfu有一个ps命令,你可以把它提取出来替换进去。
sunshine217 2007-11-6 15:29
演示了一些特性,比如,循环,数组,取模,浮点运算,
sunshine217 2007-11-6 15:45
2
sunshine217 2007-11-6 15:46
这是grep ,sed,gawk的一些演示。
O
|@6H0b1MG
能看懂以上这些,说明linux学得有一些水准了。
mwpq 2007-11-6 16:14
thanks for sharing!
Ld*tFkev R+l
I am not very familair with Linux shells. Some guys may be interested in your shell!
i9w^3u;~]b_d
Well done!
vicious7 2007-11-6 16:21
强。。。好东西
sunshine217 2007-11-6 17:26
我想了想,可能别扭是因为提示符吧,
ebyvon2@ i0t[
其实在bash中,提示符是可以自己定义的,只要你改两个环境变量 PS1,PS2,PS2是辅助命令提示符,
aI,bm*LaW2`R,{
我贴个图吧,大家就知道怎么改了。
y+a c4rx[z&@4^
这里我把它默认的$符号改成了>号,更加符合windows下的习惯了吧。hk_tPlTx
顺便也执行了一下windows自带的外部命令,ipconfig,结果就是这个样子的。y*c)V(hB]
KJ.L/Q4c&Na
[[i] 本帖最后由 sunshine217 于 2007-11-6 17:30 编辑 [/i]]
sunshine217 2007-11-6 17:27
这里我把它默认的$符号改成了>号,更加符合windows下的习惯了吧。
sunshine217 2007-11-6 17:54
其它。
sunshine217 2007-11-6 18:09
测试逻辑表达式。
sunshine217 2007-11-6 21:00
又改了两处地方,请大家把下而的包解开,里面有四个文件,
,p0Q
v%A}.h
cygpopt-0.dll 支撑文件
QGN%q,z H+L
dos2unix.exe 将windows文本文件转换成unix文本文件,(去掉行尾的\r)
hfd-F:JO
unix2dos.exe 将unix文本文件转换成windows文本文件, (在行尾加上\r)8L0J8Rs7C2|L
把这三个文件拷贝到 bin目录下去。.X:Yw]3^
a3l
cygwin.bat
Wc b5`(az,fs
这个文件代替 原cygwin.bat.
6RE{9yck
即可。
,J QQot1PV8r g
刚才都是讲些命令,接下去谈脚本文件的编写及执行方法。
sunshine217 2007-11-6 21:04
脚本的编写其实很简单,e
o l[L
你把你要的命令写成脚本,
V'Yt.C(VA
然后用dos2unix 转换一下。lm9K!{d+t
最后在bash 里执行 bash yourscript.sh 参数列表 即可。
8H$LbN0k-T1g3PY
当然,也是可以跟参数的,可以跟无限的参数。
V5|*dovH,SWRlq
举个例子吧。下图。#tu`QWam
*fa`*d`
[[i] 本帖最后由 sunshine217 于 2007-11-6 21:05 编辑 [/i]]
sunshine217 2007-11-6 21:10
test.sh
页:
[1]