genesis2000脚本简单的csh语法讲解

合集下载

Genesis2000脚本命令大全

Genesis2000脚本命令大全

Genesis2000脚本命令大全1.switch的用法,注意每一个case必须要以breaksw结尾否则会继续执行下一个case的命令(1)另外,$<的意思是取得使用者的stand input(2)echo若加上-n的选项,则游标会停留在该行最后echo-n"Input one color:"set STOPLIGHT=$<switch($STOPLIGHT)case red:echo"red"breakswcase orange:echo"orange"breakswcase green:echo"green"breakswdefault:echo"you input$STOPLIGHT"endsw--------------------------------------------------------------------2.利用set来取得变数,set ABC="I am ABC"也可以利用`command`来取得命令且外,case也可以用万用字元*来代替set VER=`uname-r`switch($VER)case5.5:echo"run the setup of$VER"breakswcase5.3:echo"run the setup of$VER"breakswcase5.*:echo"like5.x"breakswcase4.*:echo"like4.x"breakswdefault:echo"no idea"endsw--------------------------------------------------------------------3.if的语法,比较数字set n1=1set n2=2if($n1==$n2)thenecho"$n1Equal$n2"elseecho"$n1Not Equal$n2"endif--------------------------------------------------------------------4.if的语法,比较字串set n1=abcdefset n2=abcdeif($n1==$n2)thenecho"$n1Equal$n2"elseecho"$n1Not Equal$n2"--------------------------------------------------------------------5.if的语法,比较相似的字串set n1=abcdefset n2=abcdeif($n1=~$n2)thenecho"$n1Like$n2"elseecho"$n1Not Like$n2"endif--------------------------------------------------------------------6.if的语法,比较数字的大小set n1=1set n2=2if($n1>$n2)thenecho"$n1>$n2"echo"$n1<$n2"endif--------------------------------------------------------------------7.每分钟执行一次的程式#mm等于当天时间的【分钟】数set mm=`date|cut-d''-f4|cut-d:-f2`if(-r$0.out)thenrm$0.outtouch$0.outelsetouch$0.outendifwhile($mm<=16)set mm=`date|cut-d''-f4|cut-d:-f2`echo"$mm now is`date`"sleep60#echo"$mm now is`date`">>$0.outendecho"Over">>$0.out--------------------------------------------------------------------8.一个回圈的范例,并且利用expr去作加的动作回圈的语法如下:foreach number(123)echo$numberendset counter=0while($counter<=10)echo"sleeping for5seconds"sleep5counter=`expr$counter+1`end--------------------------------------------------------------------9.设定一个用当天月份与日期作为档案名称的程式如今天是10/02,则$prefix会等于该程式+1002date.csh1002set prefix=`basename$0``date'+%m%d'`echo$0echo$prefix--------------------------------------------------------------------10.移除在foreach回圈内指定的档案内的font字串foreach file([b,e,g,h,s]*.html)echo-n"Processing$file,remove the line number`grep-n font $file`"#$log表示这个$file有几个font字串set log=`grep-c font$file`if($log=='0')thenecho",pass$file"else#先找出该档案的第一次出现font的行数,如果3,则$cmd=3dset cmd=`grep-n font$file|cut-d:-f1|head-1`d#利用sed去执行删除的动作,并把结果输出到${file}1sed$cmd$file>${file}1#如果${file}1没有资料,则passingif(-z${file}1)thenecho",${file}1is zero"elsecp${file}1$filerm{$file}1echo",$file remove ok"endifendifend#后来看过sed的更进一步用法,发现先前写的太笨了,试试这个#sed/font/d$file>${file}1#一次OK,我真是大笨蛋--------------------------------------------------------------------11.功能:将指定的档案中,出现第一次【回】的那一行,加上<ti tle>xxxx</title>foreach file(sky*.html)set filetitle=ftitle#主要部份为sed部份s/^*//表示将该行第一个字元前的空白删除echo"<title>`grep回$file|head-1|sed-e's/^*//'`</tit le>">$ftitle#将刚刚那一行,再插回去head-1$file>${file}headsed1d$file>${file}1cat$ftitle>>${file}headcat${file}1>>${file}headcp${file}head$filerm${file}1rm$ftitlerm${file}headecho"$file ok"end--------------------------------------------------------------------12.一个实际建立一个ftp server的程式里面包括许多应用,相当有参考价值(未完成)set path=(/usr/bin/usr/sbin)#set true=`grep-c ftp/etc/passwd`if($true==0)thenecho"no ftp user in your system"echo-n"do you want to create the ftp user?"set answer=$<if($answer=='y'||$answer=='Y')thenset maxid=`sort/etc/passwd|tail-1|cut-d:-f3`echo$maxidset newid=`expr$maxid+1`echo$newidecho"/usr/sbin/useradd-d/home1/ftp-u$newid-s/etc/false ftp"endifelseecho"Good.Your system already has the ftp user."set ftphome=`grep ftp:/etc/passwd|cut-d:-f6`echo$ftphomeendifif(-z$ftphome)thenecho"ftphome must be non-null"exit2endifif($ftphome=="/usr"||$ftphome=="/")then echo"ftphome can't be/or/usr"exit2endif#create the ftp home directoryif(!-d$ftphome)thenecho"mkdir$ftphome"endifecho"Setting up the ftphome for SunOS`uname-r`"if(!-d$ftphome)thenecho"mkdir-p$ftphome/usr/bin"endifcp/bin/ls$ftphome/usr/binchmod111$ftphome/usr/bin/lschown root$ftphome/usr/binchmod555$ftphome/usr/binif(-r$ftphome/bin)thenmv-f$ftphome/bin$ftphome/Obinendifln-s usr/bin$ftphome--------------------------------------------------------------------13.取得该使用者的UIDif($#argv==0)thenecho"$0usage:$1username"exit2endifset uid=`grep$1/etc/passwd|cut-d:-f3`echo$uid--------------------------------------------------------------------14.将指定档案内的html取代成htmforeach file(*.html)echo"Processing$file..."sed s/html/htm/$file>${file}1cp${file}1$filerm${file}1end--------------------------------------------------------------------15.一个简简单单的范例,看看就好#!/bin/csh-f echo.................echo WELCOME to\*TAPE COPY\* echo.................echo Enter your name:#$<can read from stand inputset name=$<echo""echo Hi$name\!set D=`date`echo Today\'s date is$D[1]$D[2]$D[3]if($D[1]==Mon)thenecho-------------------------------------------------------------echo Today is$D[1]day$name,it\'s time to copy your director ys\!echo-------------------------------------------------------------elseecho-------------------------------------------------------------echo Today is$D[1]day$name,no tape copies today\!echo-------------------------------------------------------------endif--------------------------------------------------------------------16.一个finger的程式set FINGER="/usr/ucb/finger"if(-x$FINGER)thenif($#argv==0)thencat<<TAG---------------------------------Hahahah....---------------------------------TAGelse$FINGER"$*"endifelseecho"Cannot find finger on this system."endif--------------------------------------------------------------------17.取得变数的方法set W=`who-r`echo$W[9]--------------------------------------------------------------------18.更改档案名称,将*.html-->*.htm#rename*.html to*.htmecho-n"This will change*.html to*.htm.Can I continue?(y/n): "set input=$<if($input!="y"&&$input!="Y")thenecho"Ok.Quit..."exit2endifforeach file(*.html)echo"Processing$file to`basename$file.html`.htm"mv$file`basename$file.html`.htmend--------------------------------------------------------------------19.更改档案名称,将*.htm-->*.htmlecho-n"This will change*.htm to*.html.Can I continue?(y/n): "set input=$<if($input!="y"&&$input!="Y")thenecho"Ok.Quit..."exit2endif#rename*.htm to*.htmlforeach file(*.htm)echo"Processing$file to`basename$file.htm`.html"mv$file`basename$file.htm`.htmlend--------------------------------------------------------------------20.将大写的档名改成小写的档名tr string1string2会将standard input的字串,所对应到的string1,都以string2取代foreach file(*)mv$file`echo$file|tr'[A-Z]''[a-z]'`end--------------------------------------------------------------------21.将小写的档名改成大写的档名foreach file(*)mv$file`echo$file|tr'[a-z]''[A-Z]'`end。

GENESIS2000入门教程

GENESIS2000入门教程

GENESIS2000入门‎教程Padup放大pad‎paddn缩小padr‎e route扰线路Sh‎a ve削padlined‎o wn缩线line/s‎i gnal线Layer‎层in 里面out‎外面Same layer‎同一层pacing 间‎隙cu铜皮Other‎layer另一层po‎s itive 正nega‎t ive负Temp 临时‎top顶层bot底‎层Soldermask‎绿油层silk字符层‎p ower 电源导(负片)‎Vcc 电源层(负片)‎g round 地层(负片)‎apply 应用sol‎d er 焊锡singna‎l线路信号层soldn‎m ask绿油层input‎导入component‎元器件Close 关闭‎zoom放大缩小‎create 创建Re‎s te 重新设置‎corner 直角‎step P‎C B文档‎C enter 中心sna‎p捕捉‎board 板‎Route‎锣带‎r epair 修理、编辑‎r esize (编辑)放大‎缩小analy‎s is 分析‎Sinde 边、‎面Ad‎v anced 高级me‎a suer 测量‎PTH hole ‎沉铜孔‎N PTH hole 非沉铜‎孔output 导‎出VIA hole 导通‎孔smd p‎a d 贴片PAD ‎replace ‎替换fil‎l填充Attribut‎e属性‎round 圆‎square 正‎方形rec‎t angle 矩形Sel‎e ct 选择‎include 包‎含‎e xclude 不包含‎step 工作‎单元Reshape 改变‎形状pr‎o file 轮廓‎dri‎l l 钻带‎rout 锣‎带Actions 操作流‎程an‎a lyis 分析‎DFM ‎自动修改编辑‎circuit‎线性Identify ‎识别‎translate ‎转换‎j ob matrix 工作‎室‎repair 修补、‎改正Misc 辅助层‎du‎t um point 相对原‎点corn‎e r 直角‎optim‎i zation 优化or‎i gin 零点‎cent‎e r 中心‎gl‎o bal 全部‎c‎h eck 检查refer‎e nce layer 参考‎层refer‎e nce selectio‎n参考选择‎‎reverse sele‎c tion 反选snap‎对齐‎inver‎t正负调换‎symbol 元‎素‎feature‎半径histogram‎元素‎exist 存在‎‎angle 角度‎d‎i mensions 标准尺‎寸panelizatio‎n拼图‎fill paramet‎e rs 填充参数‎redundancy ‎沉余、清除层‎‎‎英文简写‎层属性顶层文字‎Top si‎l k screen ‎CM1( gtl )‎si‎l k-scren顶层阻焊‎Top so‎l der mask ‎SM1 ( gts )‎so‎l der-mask 顶层线‎路Top l‎a yer ‎L1 ( gtl ‎)s‎i gnal内层第一层‎power grou‎n d (gnd) P‎G2 ( l2-pw ) ‎power-‎g round(负片)内层‎第二层signa‎l layer ‎L3 ‎sig‎n al (正片)内层第三‎层signal ‎layer ‎L4 ‎signa‎l (正片)内层第四层‎power gro‎u nd (vcc) ‎L5 ( l5-vcc)‎power‎-ground(负片)外‎层底层bot‎t om layer ‎L6 ( gb‎l ) ‎s ignal底层阻焊‎bottom s‎o lder mask ‎S M6 ‎solder-m‎a sk底层文字‎bottom silk‎screen CM‎6‎silk-scren‎层菜单Display‎------------‎---------- --‎---当前层显示的颜色F‎e atures histo‎g ram --------‎-------- 当前层的‎图像统计Copy ---‎-------------‎------ ------‎-复制Merge --‎-------------‎------- -----‎-合并层Unmerge‎------------‎------- -----‎反合并层(将复合层分成正‎负两层) Optimize‎lerels -----‎------ ----- ‎层优化(当正负层太多时,要‎优化成最大3层)Fill‎profile ----‎-------------‎-- 填充profile(‎轮廓)Register ‎-------------‎----- ---- 层自‎动对位matrix -‎-------------‎---- ---- 层属‎性表(新建、改名、删除)‎copper/expos‎e d area -----‎------ 计算铜面积‎(自动算出百分几)at‎t ribates ----‎-------------‎- - 层属性(较少用‎)notes -----‎-------------‎------ 记事本‎(较少用)clip ar‎e a ----------‎-------- - ‎删除区域(可自定义,或定‎义profile) dri‎l l tools mana‎g er ---------‎-- 钻孔管理(改孔的属‎性,大小等) drill ‎f ilter ------‎------------ ‎钻孔过滤hole si‎z es --------‎---------- ‎钻孔尺寸(在分孔图转钻孔经‎常用到) create d‎r ill map ----‎--------- 利用‎钻孔做分孔图(如有槽孔,转‎出来有变)update ‎v erification ‎c oupons ---- ‎更新首尾孔的列表re-r‎e ad --------‎---------- 重读‎文件(当文件误删时无法恢复‎时,可重读)trunca‎t e ----------‎-------- 删除整层‎数据(无法用ctrl‎+z恢复) compare‎------------‎------ 层对比‎(很有用,可以查看层与‎层之间改动过的地方)fl‎a ten -----‎-------------‎翻转(只有在拼版里面‎才会出现)text re‎f erence------‎------------文‎字参考create sh‎a pelist------‎------------产‎生形状列表delete ‎s hapelist----‎-------------‎-删除形状列表EDIT菜‎单undo-------‎-----------撤消‎上一次操作delete-‎-------------‎----删除move--‎-------------‎---移动*copy--‎-------------‎---复制*resize‎-------------‎-----修改图形大小形状‎*transform--‎-------------‎---旋转、镜像、缩放c‎o nnections---‎-------------‎--buffer----‎-------------‎-reshape----‎-------------‎-polarity---‎-------------‎--更改层的极性*cer‎a te----------‎--------建立*c‎h ange--------‎----------更改*‎attributes--‎-------------‎---属性edit之r‎e sizeglobal-‎-------------‎----所有图形元素su‎r faces-------‎-----------沿着‎表面resizc the‎r rnals and do‎n uts---------‎---------散热盘及‎同圆contourize‎&resize------‎------------表‎面化及修改尺寸poly ‎l ine --------‎----------多边形‎by factor---‎-------------‎--按照比例edit之m‎o vesame laye‎r------------‎------同层移动ot‎h er layer----‎-------------‎-移动到另一层stret‎e h parallel l‎i nes---------‎---------平行线伸‎缩orthogonal ‎s trrtch------‎------------平‎角线伸缩move tri‎p lets (fixed ‎a ngele)------‎------------角‎度不变地移线(ALT +D)‎move triplet‎s(fixed leng‎t h)----------‎--------长度不变地‎移线(ALT +J)mov‎e&to panel---‎-------------‎--把STEP中的图形移动‎到其它的STEP中edi‎t之copysame ‎l ayer--------‎----------同层移‎动other layer‎-------------‎-----移动到另一层s‎t ep&repeatsam‎e layer------‎------------同‎层移动other lay‎e r-----------‎-------同层排版e‎d it之reshapec‎h ange symbols‎a me ---------‎---------更改图形‎break-------‎-----------打散‎break to Isl‎a nds/holes---‎-------------‎--打散特殊图形arc ‎t o lines-----‎-------------‎弧转线line to p‎a d-----------‎-------线转pad‎c ontourize---‎-------------‎--创建铜面部件(不常用)‎drawn to sur‎f ace---------‎--------- 线变s‎u rfaceclean ‎h oles--------‎----------清理空‎洞clean surf‎a ce----------‎--------清理sur‎f acefill----‎-------------‎-填充(可以将surfa‎c e以线填充)desig‎n to rout ---‎-------------‎--设计到rout(做锣带‎常用,最佳值4 32)‎substitue --‎-------------‎---替代(常用,分孔图转‎钻孔)cutting d‎a ta----------‎--------填充成su‎r face (常用来填充C‎A D数据)olarity‎r c direction-‎-------------‎----封闭区域edit‎之polarity(图像性‎质)positive--‎-------------‎---图像为正negat‎i ve----------‎--------图像为负‎i nvert-------‎-----------正负‎转换edit之ceate‎(建立)step---‎-------------‎--新建一个stepsy‎m bol---------‎---------新建一个‎s ymbolprofil‎e------------‎------新建一个pro‎f ileedit之cha‎n ge(更改)chan‎g e text------‎------------更‎改字符串pads to ‎s lots--------‎----------pad‎变成slots (槽)‎s pace tracks ‎e venly-------‎-----------自动‎平均线隙(很重要)AC‎T IONS菜单check‎lists------‎------------检‎查清单re-read E‎R FS----------‎--------重读erf‎文件netlist an‎a lyzer-------‎-----------网络‎分析netlist op‎t imization---‎-------------‎--网络优化output‎-------------‎-----输出clear‎selete&highl‎i ght---------‎---------取消选择‎或高亮reverse s‎e leteion-----‎----------参考选‎择(很重要,有TOUCH(‎接触)COVERED(完全‎接触))script a‎c tion--------‎----------设置脚‎本名称selete dr‎a wn----------‎--------选择线(一‎般用来选大铜皮)conv‎e rt netlist t‎o layers-----‎-------------‎转化网络到层notes-‎-------------‎----文本contou‎r operations-‎-------------‎----bom view‎-------------‎-----surface操‎作OPTION菜单s‎e letion------‎------------选‎择attributes-‎-------------‎----属性graphi‎c control----‎-------------‎-显示图形控制snap-‎-------------‎----抓取measue‎r------------‎------测量工具fi‎l l parameters‎-------------‎-----填充参数lin‎e parameters-‎-------------‎----线参数color‎s------------‎------显示颜色设置‎c omponents---‎-------------‎--零件ANALYSI‎S菜单surface a‎n alyzer------‎------------查‎找铜面部件中的问题dri‎l l checks----‎-------------‎-钻孔检查board-d‎r ill checks--‎-------------‎---查找钻孔层与补偿削铣‎层中潜在的工艺性缺陷si‎g nal layer ch‎e cks---------‎---------线路层检‎查power/groun‎d checks-----‎-------------‎内层检查solder m‎a sk check----‎-------------‎-阻焊检查silk sc‎r een checks -‎-------------‎----字符层检查pro‎f ile checks--‎-------------‎---profile检查‎d rill summary‎-------------‎-----生成padsta‎c k中的孔的统计数字,查找‎p adtack中的最小焊环‎quote analys‎i s-----------‎-------smd s‎u mmary-------‎-----------对外‎层铜箔层执行操作,生成有关‎被检验层中的SMD定位和封‎装的统计报告orbote‎c h AOI check‎s------------‎------microv‎i a checks----‎-------------‎-提供HDI设计的高效钻‎孔分析rout laye‎r checks-----‎-------------‎pads for dri‎l l-----------‎-------列出每种类型‎钻孔的焊盘尺寸以及焊盘的数‎量DFM菜单clea‎n up----------‎--------redu‎n dancy cleaun‎p------------‎------repair‎-------------‎-----sliver-‎-------------‎----optimiza‎t ion---------‎---------yie‎l d improvemen‎t------------‎------advanc‎e d-----------‎-------custo‎m------------‎------legacy‎-------------‎-----dft----‎-------------‎-DFM之Cleanu‎plegnd detec‎t ion---------‎---------文本检测‎construct pa‎d s (auto)----‎-------------‎-自动转padconst‎r uct pads (au‎t o,all angles‎)------------‎------自动转pad(‎无论角度大小)建议不用c‎o nstruct pads‎(ref)-------‎-----------手动‎转pad (参照erf)‎DFM之redundan‎c y cleanupaa‎r edundant lin‎e removal----‎-------------‎-删除重线nfp rem‎o val---------‎-------------‎--------删重孔、删‎独立PAD drawn t‎o outline ---‎-------------‎--以线或轮廓来代替线绘区‎域减少层中的部件数量D‎F M之repairpad‎snapping----‎-------------‎-整体PAD对齐pinh‎o le eliminati‎o n-----------‎-------除残铜补沙眼‎neck down re‎p air---------‎---------修补未完‎全被其它线或焊盘覆盖的圆端‎或方端产生的颈锁断开(即‎修补未连接上的线)DF‎M之sliversliv‎e r&acute angl‎e s-----------‎-------修补潜在加工‎缺陷的锐角sliver&‎p eelable rep‎a ir----------‎--------查找修补信‎号层、地电层和阻焊层中的s‎l iverlegend ‎s liver fill--‎-------------‎---用于填充具有.nom‎e nclature属性集的‎组件之间的slivert‎a ngency elimi‎n ation-------‎-----------‎D FM之optimizat‎i onsignal la‎y er opt -----‎-------------‎线路层优化line wi‎d th opt------‎------------<‎/Sctr+e 指定‎放大缩小的中心ctr+b‎删除选择的物件ctr+w‎在实体、轮廓、骨架之间切‎换ctr+c复制ctr‎+v粘贴ctr+x移动‎a lt+c同层复制ctr‎l+z 恢复到前一步操作‎a lt+d移动三连线,角度‎不变arl+j 移动三连‎线,长度不变alt+n ‎选择参数alt+g 图形‎控制面板alt+l 线参‎数s+g 扑捉到栅格s‎+c 扑捉到中心s+s ‎扑捉到骨架s+e 扑捉到‎边缘s+i 扑捉到交*点‎s+m 扑捉到中点s+‎p扑捉到轮廓线s+o ‎关闭对齐s+a 转换sn‎a p层CTRL+Q 可以‎水平或者垂直移动实体CT‎R L+M 可以用不同的颜色‎显示打开任意多层ctrl‎+n 显示负层物体‎。

GENESIS操作流程

GENESIS操作流程

GENESIS操作流程1、桌面打开CSH后输入GET即可点动GENESIS 2000,输入用户名各密码,登陆到GENESIS 2000的主画面。

2、在FICE菜单下GREATE .IOB.名选择.DATE BASE.确认后打开刚建立的IOB,并打开INPUT。

3、确认所读资料的位置及文件名的正确性(按照MI;对照文件名的文件,方件大小)4、IDENTIFY FILE/CHECK所读资料的正确性(包括资料的数据格式,检查INPUT图形的正确性:INPUT是否有WARNING,WARNING是否会对图造成影响等,并SAVE JOB。

5、设定MATRIX、LAYER、NAME层的合并、REYISTER定DATAM POINT.ORIG。

COPY现时STEP并更名为“A”并保留备份,的STEP为“B”。

6、在新的STEP中(“B”)做:CONSTRUET.PADS。

(注意先做防焊,以此做参照再做线路层)并SACE IOB。

7、新建SEP(“C”)COPY:“B”中的资料并以“B”为原始资料备份。

8、打开STEP“(制作钻孔层、CDRLU TOOL MANGER)。

注使用加大钻孔参数FLASH-GOLD,HASL,是否有用到特殊孔径50MIL1和2)MIL1内条分板孔、定义孔的属性。

(机台识别孔)检查所有孔径、孔数是否与MI中相符。

9、制作ROUT层,定义PROFILE。

10、删除PROFILE以外的图形,CHEEK所有PROFILE外的图菜是否为所需图形。

是否需移入到板内并GALE IOB。

11、DATE CLEANUP做一些所有层的数据优化附加层,删除重复的图形数据,做蚀刻补偿。

12、CHECK所有层的资料是否与“A”中的资料一致,做COMPARE,确认所做的修改产生METDIST FROM“B”与“C”中的NETLIST 对比确认所做修改没有问题后SAME JOB。

13、ANALYSIS ALL,所有层看报告产生的多少来决定做DFM14、DFM:(所有需要修改与优化的层,根据所产生的报告手动自动编辑图形,至MI跟制程工艺的要求值)15、COMPARE层和COMPARE“A”与“C”中的METLIST16、填充PINROLE跟SLIVER,此动作可多做几次并SAVE IOB17、PANEL排版,新建STEP为“D”,在此STEP中定义PANEL SIZE(按照MI 要求制作排版)注意:最后一次小PANE排版的STEP固定为PNLI最后要求输出的PANEL的STEP固定为PANEL18、排宽版厚分别有小PANEL跟大PANEL的SCRIPTS运行SCRIPTS检查SCRIPTS所产生图形的正确性。

Genesis2000脚本编写常用命令剖析

Genesis2000脚本编写常用命令剖析

1. switch 的用法,注意每一个case 必须要以breaksw 结尾 否则会继续执行下一个case 的命令(1) 另外,$< 的意思是取得使用者的stand input(2) echo 若加上-n 的选项,则游标会停留在该行最后echo -n "Input one color: "set STOPLIGHT = $<switch ($STOPLIGHT)case red:echo "red"breakswcase orange:echo "orange"breakswcase green:echo "green"breakswdefault:echo "you input $STOPLIGHT"endsw--------------------------------------------------------------------2. 利用set 来取得变数,set ABC = "I am ABC"也可以利用`command` 来取得命令且外,case 也可以用万用字元* 来代替set VER = `uname -r`switch ($VER)case 5.5:echo "run the setup of $VER"breakswcase 5.3:echo "run the setup of $VER"breakswcase 5.*:echo "like 5.x"breakswcase 4.*:echo "like 4.x"breakswdefault:echo "no idea"endsw--------------------------------------------------------------------3. if 的语法,比较数字set n1 = 1set n2 = 2if ($n1 == $n2) thenecho "$n1 Equal $n2"elseecho "$n1 Not Equal $n2"endif--------------------------------------------------------------------4. if 的语法,比较字串set n1 = abcdefset n2 = abcdeif ($n1 == $n2) thenecho "$n1 Equal $n2"elseecho "$n1 Not Equal $n2"endif--------------------------------------------------------------------5. if 的语法,比较相似的字串set n1 = abcdefset n2 = abcdeif ($n1 =~ $n2) thenecho "$n1 Like $n2"elseecho "$n1 Not Like $n2"endif--------------------------------------------------------------------6. if 的语法,比较数字的大小set n1 = 1set n2 = 2if ($n1 > $n2) thenecho "$n1 > $n2"elseendif--------------------------------------------------------------------7. 每分钟执行一次的程式# mm 等于当天时间的【分钟】数set mm = `date | cut -d' ' -f4 | cut -d: -f2`if ( -r $0.out ) thenrm $0.outtouch $0.outelsetouch $0.outendifwhile ( $mm <= 16 )set mm = `date | cut -d' ' -f4 | cut -d: -f2`echo "$mm now is `date`"sleep 60#echo "$mm now is `date`" >> $0.outendecho "Over" >> $0.out--------------------------------------------------------------------8. 一个回圈的范例,并且利用expr 去作加的动作回圈的语法如下:foreach number (1 2 3)echo $numberendset counter = 0while ($counter <= 10)echo "sleeping for 5 seconds"sleep 5counter = `expr $counter + 1 `end--------------------------------------------------------------------9. 设定一个用当天月份与日期作为档案名称的程式如今天是10/02 , 则$prefix 会等于该程式+ 1002set prefix = `basename $0``date '+ %m%d'`echo $0echo $prefix--------------------------------------------------------------------10. 移除在foreach 回圈内指定的档案内的font 字串foreach file ([b,e,g,h,s]*.html)echo -n "Processing $file, remove the line number `grep -n font $file`"# $log 表示这个$file 有几个font 字串set log = `grep -c font $file`if ( $log == '0' ) thenecho ", pass $file"else# 先找出该档案的第一次出现font 的行数,如果3,则$cmd = 3dset cmd = `grep -n font $file | cut -d: -f1 | head -1`d# 利用sed 去执行删除的动作,并把结果输出到${file}1sed $cmd $file > ${file}1# 如果${file}1 没有资料,则passingif ( -z ${file}1 ) thenecho " , ${file}1 is zero"elsecp ${file}1 $filerm {$file}1echo " , $file remove ok"endifendifend# 后来看过sed 的更进一步用法,发现先前写的太笨了,试试这个# sed /font/d $file > ${file}1# 一次OK, 我真是大笨蛋--------------------------------------------------------------------11. 功能:将指定的档案中,出现第一次【回】的那一行,加上<title> xxxx </title>foreach file (sky*.html)set filetitle = ftitle# 主要部份为sed 部份 s/^ *// 表示将该行第一个字元前的空白删除echo "<title>`grep 回$file | head -1 | sed -e 's/^ *//'`</title>" > $ftitle# 将刚刚那一行,再插回去head -1 $file > ${file}headsed 1d $file > ${file}1cat $ftitle >> ${file}headcat ${file}1 >> ${file}headcp ${file}head $filerm ${file}1rm $ftitlerm ${file}headecho "$file ok"end--------------------------------------------------------------------12. 一个实际建立一个ftp server 的程式 里面包括许多应用,相当有参考价值( 未完成)set path = ( /usr/bin /usr/sbin )#set true = `grep -c ftp /etc/passwd`if ( $true == 0 ) thenecho "no ftp user in your system"echo -n "do you want to create the ftp user? "set answer = $<if ($answer == 'y' || $answer == 'Y') thenset maxid = `sort /etc/passwd | tail -1 | cut -d: -f3`echo $maxidset newid = `expr $maxid + 1`echo $newidecho "/usr/sbin/useradd -d /home1/ftp -u $newid -s /etc/false ftp"endifelseecho "Good. Your system already has the ftp user. "set ftphome = `grep ftp: /etc/passwd | cut -d: -f6`echo $ftphomeendifif ( -z $ftphome ) thenecho "ftphome must be non-null"exit 2endifif ( $ftphome == "/usr" || $ftphome == "/" ) thenecho "ftphome can't be / or /usr"exit 2endif# create the ftp home directoryif ( ! -d $ftphome ) thenecho "mkdir $ftphome"endifecho "Setting up the ftphome for SunOS `uname -r`"if ( ! -d $ftphome ) thenecho "mkdir -p $ftphome/usr/bin"endifcp /bin/ls $ftphome/usr/binchmod 111 $ftphome/usr/bin/lschown root $ftphome/usr/binchmod 555 $ftphome/usr/binif ( -r $ftphome/bin ) thenmv -f $ftphome/bin $ftphome/Obinendifln -s usr/bin $ftphome--------------------------------------------------------------------13. 取得该使用者的UIDif ( $#argv == 0 ) thenecho "$0 usage: $1 username"exit 2endifset uid = `grep $1 /etc/passwd | cut -d: -f3`echo $uid--------------------------------------------------------------------14. 将指定档案内的html 取代成htmforeach file ( *.html )echo "Processing $file ..."sed s/html/htm/ $file > ${file}1cp ${file}1 $filerm ${file}1end--------------------------------------------------------------------15. 一个简简单单的范例,看看就好#!/bin/csh -fecho .................echo WELCOME to \* TAPE COPY \*echo .................echo Enter your name:# $< can read from stand inputset name = $<echo " "echo Hi $name \!set D = `date`echo Today\'s date is $D[1] $D[2] $D[3]if ($D[1] == Mon) thenecho -------------------------------------------------------------echo Today is $D[1]day $name, it\'s time to copy your directorys\! echo -------------------------------------------------------------elseecho -------------------------------------------------------------echo Today is $D[1]day $name, no tape copies today\!echo -------------------------------------------------------------endif--------------------------------------------------------------------16. 一个finger 的程式set FINGER = "/usr/ucb/finger"if ( -x $FINGER ) thenif ( $#argv == 0 ) thencat << TAG---------------------------------Hahahah ....---------------------------------TAGelse$FINGER "$*"endifelseecho "Cannot find finger on this system."endif--------------------------------------------------------------------17. 取得变数的方法set W = `who -r`echo $W[9]--------------------------------------------------------------------18. 更改档案名称,将*.html --> *.htm# rename *.html to *.htmecho -n "This will change *.html to *.htm. Can I continue ? (y/n) : " set input = $<if ( $input != "y" && $input != "Y" ) thenecho "Ok. Quit..."exit 2endifforeach file ( *.html )echo "Processing $file to `basename $file .html`.htm "mv $file `basename $file .html`.htmend--------------------------------------------------------------------19. 更改档案名称,将*.htm --> *.htmlecho -n "This will change *.htm to *.html. Can I continue ? (y/n) : " set input = $<if ( $input != "y" && $input != "Y" ) thenecho "Ok. Quit..."exit 2endif# rename *.htm to *.htmlforeach file ( *.htm )echo "Processing $file to `basename $file .htm`.html " mv $file `basename $file .htm`.htmlend--------------------------------------------------------------------20. 将大写的档名改成小写的档名tr string1 string2 会将standard input 的字串,所对应到的string1, 都以string2 取代foreach file ( * )mv $file `echo $file | tr '[A-Z]' '[a-z]'`end--------------------------------------------------------------------21. 将小写的档名改成大写的档名foreach file (*)mv $file `echo $file | tr '[a-z]' '[A-Z]'`end</P< p>。

genesis2000脚本编程培训教程

genesis2000脚本编程培训教程

阶段3

备注
1.本课程分为三个阶段,课时为20天;实际授课时进度有快慢,可根据学员不同基础 调整授课内容及进度。 2.每课时均配有实际例程及课后作业,例程均为常用典型脚本,学习完此套课程相当 于写完一套套装脚本。在实际工作中,例程可直接使用。 3.修完此套课程,可独立完成PCB/FPC工厂脚本编写及程式开发工作。 4.终生免费技术咨询,且提供脚本培训/开发/修改/破解等全套服务,欢迎来电来函咨 询。
觅蜂零基础C-shell入门教程大纲 ——王生 阶段 序号 1 2 3 4 阶段1 5 6 7 8 9 10 11 12 13 14 阶段2 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 内容 Genesis/GenFlex C-Shell Script 简介 Genesis/GenFlex Script菜单讲解 C-sheel基础知识讲解-运算符、表达式 C-sheel基础知识讲解-内置命令语法 C-sheel基础知识讲解-条件结构语法 C-sheel基础知识讲解-循环结构语法 Linux指令讲解-文件管理系列指令 Linux指令讲解-文档编辑系列指令 Linux指令讲解-系统设置系列指令 Linux and C-sheel 在Genesis中的典型应用 Genesis/GenFlex 内部指令讲解-COM PAUSE AUX Genesis/GenFlex 内部指令讲解-Mouse VOF VON Genesis/GenFlex 环境变量讲解 -系统变量 $JOB $STEP linux和unix shell编程指南-正则表达式 linux和unix shell编程指南-Tr Sort Uniq Jion Cut Split linux和unix shell编程指南-Grep语法 linux和unix shell编程指南-AWK语法 linux和unix shell编程指南-sed语法 Genesis/GenFlex GUI界面交互 Genesis/GenFlex Info Command Genesis/GenFlex Script运行环境 Genesis/GenFlex Line mode command Genesis/GenFlex 典型程式剖析 Genesis/GenFlex From Genesis/GenFlex Flows Genesis/GenFlex Ncd hooks配置 Genesis/GenFlex ERF修改 Genesis/GenFlex Checklist串联用法 Genesis/GenFlex DFM_PE介绍 Genesis/GenFlex 程式编写指南 例程

第六章( CSH 语法介绍 )

第六章( CSH 语法介绍 )

表4-1 常用文件重定向命令
command > filename
把标准输出重定向到一个新的文件中
command >> filename
把标准输出重定向到一个文件中(追加)
command 1 > fielname
把标准输出重定向到一个文件中
command > filename 2>&1
把标准输出和标准错误一起重定向到一个文件中
$set x = 100
$echo “this x value $x”
this x value 100
如果我们在变量后面不加空格则需要做如下处理:
$ set x = 100
$echo “this x value ${x}y”
this x value 100y
6.2.3:tee 命令:
tee 命令作用可以用字母 T 形象的表示,它的输出的一个副本输送到标准输出,另一个副本则拷贝到相
genesis console
Oct 19 14:29 (:0)
genesis dtremote Oct 23 12:18 (192.168.200.168:1)
genesis pts/3
Oct 23 12:18 (192.168.200.168:1.0)
genesis pts/4
Oct 23 12:19 (192.168.200.168:1.0)
第六章
CSH 语法介绍
如果要显示双引号则需要用下面的方法:
$echo ‘how “are” you’
how “are'” you
请注意的是作为符号的那一组必须成对的出现。否则将出现错误提示。
(2):显示变量$x 的值:

Genesis2000脚本编写常用命令解析

Genesis2000脚本编写常用命令解析

1. switch 的用法,注意每一个case 必须要以breaksw 结尾否则会继续执行下一个case 的命令(1) 另外,$< 的意思是取得使用者的stand input(2) echo 若加上-n 的选项,则游标会停留在该行最后echo -n "Input one color: "set STOPLIGHT = $<switch ($STOPLIGHT)case red:echo "red"breakswcase orange:echo "orange"breakswcase green:echo "green"breakswdefault:echo "you input $STOPLIGHT"endsw--------------------------------------------------------------------2. 利用set 来取得变数,set ABC = "I am ABC"也可以利用`command` 来取得命令且外,case 也可以用万用字元* 来代替set VER = `uname -r`switch ($VER)case 5.5:echo "run the setup of $VER"breakswcase 5.3:echo "run the setup of $VER"breakswcase 5.*:echo "like 5.x"breakswcase 4.*:echo "like 4.x"breakswdefault:echo "no idea"endsw-------------------------------------------------------------------- 3. if 的语法,比较数字set n1 = 1set n2 = 2if ($n1 == $n2) thenecho "$n1 Equal $n2"elseecho "$n1 Not Equal $n2"endif-------------------------------------------------------------------- 4. if 的语法,比较字串set n1 = abcdefset n2 = abcdeif ($n1 == $n2) thenecho "$n1 Equal $n2"elseecho "$n1 Not Equal $n2"endif-------------------------------------------------------------------- 5. if 的语法,比较相似的字串set n1 = abcdefset n2 = abcdeif ($n1 =~ $n2) thenecho "$n1 Like $n2"elseecho "$n1 Not Like $n2"endif-------------------------------------------------------------------- 6. if 的语法,比较数字的大小set n1 = 1set n2 = 2if ($n1 > $n2) thenecho "$n1 > $n2"elseecho "$n1 < $n2"endif-------------------------------------------------------------------- 7. 每分钟执行一次的程式# mm 等于当天时间的【分钟】数set mm = `date | cut -d' ' -f4 | cut -d: -f2`if ( -r $0.out ) thenrm $0.outtouch $0.outelsetouch $0.outendifwhile ( $mm <= 16 )set mm = `date | cut -d' ' -f4 | cut -d: -f2`echo "$mm now is `date`"sleep 60#echo "$mm now is `date`" >> $0.outendecho "Over" >> $0.out-------------------------------------------------------------------- 8. 一个回圈的范例,并且利用expr 去作加的动作回圈的语法如下:foreach number (1 2 3)echo $numberendset counter = 0while ($counter <= 10)echo "sleeping for 5 seconds"sleep 5counter = `expr $counter + 1 `end-------------------------------------------------------------------- 9. 设定一个用当天月份与日期作为档案名称的程式如今天是10/02 , 则$prefix 会等于该程式+ 1002date.csh1002set prefix = `basename $0``date '+ %m%d'`echo $0echo $prefix--------------------------------------------------------------------10. 移除在foreach 回圈内指定的档案内的font 字串foreach file ([b,e,g,h,s]*.html)echo -n "Processing $file, remove the line number `grep -n font $file`"# $log 表示这个$file 有几个font 字串set log = `grep -c font $file`if ( $log == '0' ) thenecho ", pass $file"else# 先找出该档案的第一次出现font 的行数,如果3,则$cmd = 3dset cmd = `grep -n font $file | cut -d: -f1 | head -1`d# 利用sed 去执行删除的动作,并把结果输出到${file}1sed $cmd $file > ${file}1# 如果${file}1 没有资料,则passingif ( -z ${file}1 ) thenecho " , ${file}1 is zero"elsecp ${file}1 $filerm {$file}1echo " , $file remove ok"endifendifend# 后来看过sed 的更进一步用法,发现先前写的太笨了,试试这个# sed /font/d $file > ${file}1# 一次OK, 我真是大笨蛋--------------------------------------------------------------------11. 功能:将指定的档案中,出现第一次【回】的那一行,加上<title> xxxx </title>foreach file (sky*.html)set filetitle = ftitle# 主要部份为sed 部份s/^ *// 表示将该行第一个字元前的空白删除echo "<title>`grep 回$file | head -1 | sed -e 's/^ *//'`</title>" > $ftitle# 将刚刚那一行,再插回去head -1 $file > ${file}headsed 1d $file > ${file}1cat $ftitle >> ${file}headcat ${file}1 >> ${file}headcp ${file}head $filerm ${file}1rm $ftitlerm ${file}headecho "$file ok"end--------------------------------------------------------------------12. 一个实际建立一个ftp server 的程式里面包括许多应用,相当有参考价值( 未完成)set path = ( /usr/bin /usr/sbin )#set true = `grep -c ftp /etc/passwd`if ( $true == 0 ) thenecho "no ftp user in your system"echo -n "do you want to create the ftp user? "set answer = $<if ($answer == 'y' || $answer == 'Y') thenset maxid = `sort /etc/passwd | tail -1 | cut -d: -f3`echo $maxidset newid = `expr $maxid + 1`echo $newidecho "/usr/sbin/useradd -d /home1/ftp -u $newid -s /etc/false ftp"endifelseecho "Good. Your system already has the ftp user. "set ftphome = `grep ftp: /etc/passwd | cut -d: -f6`echo $ftphomeendifif ( -z $ftphome ) thenecho "ftphome must be non-null"exit 2endifif ( $ftphome == "/usr" || $ftphome == "/" ) then echo "ftphome can't be / or /usr"exit 2endif# create the ftp home directoryif ( ! -d $ftphome ) thenecho "mkdir $ftphome"endifecho "Setting up the ftphome for SunOS `uname -r`"if ( ! -d $ftphome ) thenecho "mkdir -p $ftphome/usr/bin"endifcp /bin/ls $ftphome/usr/binchmod 111 $ftphome/usr/bin/lschown root $ftphome/usr/binchmod 555 $ftphome/usr/binif ( -r $ftphome/bin ) thenmv -f $ftphome/bin $ftphome/Obinendifln -s usr/bin $ftphome-------------------------------------------------------------------- 13. 取得该使用者的UIDif ( $#argv == 0 ) thenecho "$0 usage: $1 username"exit 2endifset uid = `grep $1 /etc/passwd | cut -d: -f3`echo $uid-------------------------------------------------------------------- 14. 将指定档案内的html 取代成htmforeach file ( *.html )echo "Processing $file ..."sed s/html/htm/ $file > ${file}1cp ${file}1 $filerm ${file}1end--------------------------------------------------------------------15. 一个简简单单的范例,看看就好#!/bin/csh -fecho .................echo WELCOME to \* TAPE COPY \*echo .................echo Enter your name:# $< can read from stand inputset name = $<echo " "echo Hi $name \!set D = `date`echo Today\'s date is $D[1] $D[2] $D[3]if ($D[1] == Mon) thenecho -------------------------------------------------------------echo Today is $D[1]day $name, it\'s time to copy your directorys\!echo -------------------------------------------------------------elseecho -------------------------------------------------------------echo Today is $D[1]day $name, no tape copies today\!echo -------------------------------------------------------------endif--------------------------------------------------------------------16. 一个finger 的程式set FINGER = "/usr/ucb/finger"if ( -x $FINGER ) thenif ( $#argv == 0 ) thencat << TAG---------------------------------Hahahah ....---------------------------------TAGelse$FINGER "$*"endifelseecho "Cannot find finger on this system."endif--------------------------------------------------------------------17. 取得变数的方法set W = `who -r`echo $W[9]--------------------------------------------------------------------18. 更改档案名称,将*.html --> *.htm# rename *.html to *.htmecho -n "This will change *.html to *.htm. Can I continue ? (y/n) : " set input = $<if ( $input != "y" && $input != "Y" ) thenecho "Ok. Quit..."exit 2endifforeach file ( *.html )echo "Processing $file to `basename $file .html`.htm "mv $file `basename $file .html`.htmend--------------------------------------------------------------------19. 更改档案名称,将*.htm --> *.htmlecho -n "This will change *.htm to *.html. Can I continue ? (y/n) : " set input = $<if ( $input != "y" && $input != "Y" ) thenecho "Ok. Quit..."exit 2endif# rename *.htm to *.htmlforeach file ( *.htm )echo "Processing $file to `basename $file .htm`.html "mv $file `basename $file .htm`.htmlend-------------------------------------------------------------------- 20. 将大写的档名改成小写的档名tr string1 string2 会将standard input 的字串,所对应到的string1, 都以string2 取代foreach file ( * )mv $file `echo $file | tr '[A-Z]' '[a-z]'`end-------------------------------------------------------------------- 21. 将小写的档名改成大写的档名foreach file (*)mv $file `echo $file | tr '[a-z]' '[A-Z]'`end</P< p>。

Genesis2000 Script 脚本编程1

Genesis2000 Script 脚本编程1
一:Genesis-script 之C-Shell
在unix系统中,像在DOS中的batch一样,你可以把一系列命令输入到一个叫做script的文件中. 利用source命令或者设置这个文件的x(可运行)属性并直接键入该文件名, 就像用一个命令那样, 你就可以让 C shell 从文件中读入命令并执行它们.
if ( expression ) command
if ( expression )
command
# ""(backslash)后面只能接newline(回车即可), 不能有任何其他字符载
# 单个命令command不能包括"|", "&" 以及";". 也不能使用其它控制语句
不能使用下面的格式
对其他变量, 也不会发生"下标溢出"的错误, 例如:
当(n > $#var) 时, $var[n-]不给任何结果和错误信息. 而$var[m-n]给出$var[m]到$var[$#var]的words.如果(m > $#var) 则没有任何结果
2.文件操作格式
-操作符 filename
-e 文件存在返回1(.true.), 否则返回0(.false
#!/bin/csh
set ai=1
while ( $ai <= 10 )
echo the ${ai}th time running.
@ ai++
end
4. 开关控制 switchfans
语法为:
switch ( $word )
case str_1:
你可以对路径名进行操作, 以便于去掉你不需要的部分
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

genesis2000脚本简单的csh语法讲解
一、变数
1. 字串变数
这个部分和Bourne Shell的变数一样,只不过在设定变数值时不能使用Bourne
Shell的方式,而必须打:
set var=value
2. 数字运算
基本上C Shell 没有数字变数,但C Shell 却有简单的方法处理数字运算:
@ var operator expression
operator可以是C 语言中的=, +=, -=,……,而expression则是运算式。


算式的运算子如下:
A. () 改变计算的顺序
~@
B. ~ 位元NOT运算
@~~
! 逻辑否定
C.
% 取馀数
/ 除
* 乘
- 减
+ 加
D.
>> 右移
<< 左移
E.
> 大於
< 小於
>= 大於等於
<= 小於等於
!= 不等於
== 等於
F.
& 位元AND运算^ 位元XOR运算| 位元OR 运算G.
&& 逻辑AND
|| 逻辑OR
除此之外,我们也可以检验一个档案的状态,如下
-n filename
而-n可为下列之一
-d 档案是一个目录档案
-e 档案存在
-f 档案为一般的档案
-o 使用者拥有这个档案
-r 使用者可以读取这个档案
-w 使用者可以写入这个档案
-x 使用者可以执行这个档案
-z 档案长度为0
@ count = count + 1
@ flag = -e /users/cc/mgtsai/mail && -e /usr/spool/mail
3. 阵列
在C Shell 中,我们可以宣告阵列变数,方式如下
set var=(val1 val2 ……)
而var[1]之值为val1,var[2]之值为val2……。

而$var代表整个阵列。

我们
可以用$#var 来计算阵列个数,也可以用$?var 来检查某个变数是否已宣告。

4. 特殊变数
$argv 和Bourne Shell的$*相似,只不过这是一个阵列。

$argv[n] 和Bourne Shell的$n相同,但不受个数限制。

$#argv 和Bourne Shell的$#相同
$home 和Bourne Shell的$HOME相同
$path 和Bourne Shell的$PATH相似,只不过这是一个阵列$prompt 和Bourne Shell的$PS1相同
$shell Shell的路径名称
$status 和Bourne Shell的$?相同
$$ 和Bourne Shell的$$相同
$< 键盘输入
二、执行命令
基本上和Bourne Shell相同,只有一点在Bourne Shell中的”.”命令在C Shell 中
则为”source”命令。

三、流程控制
在C Shell 中流程控制不像Bourne Shell中一般需要使用test命令。

相反地,它和
C 语言类似只要在条件中写出运□式即可。

当运算结果不为零时,其值为真,为零
时其值为伪。

以下是C Shell的流程控制
1. if
语法如下
if (expression) simple-command
2. goto
语法如下
goto label
这时程式会跳至以l”label:”开头的那一行执行
if ($#argv == 2) goto goodargs
echo ‘Please use two arguments.’
exit
goodrags:

3. if then else
这和Bourne Shell的if then, if then else, if then elif 相似。

语法如下A. if (expression) then
commands
endif
B. if (expression) then
commands
else
commands
endif
C. if (expression) then
commands
else if (expression) then
else
commands
endif
4. foreach
这和Bourne Shell的for in相似。

语法如下
foreach var (arg-list)
commands
end
5. while
这和Bourne Shell的while相似。

语法如下
while (expression)
commands
end
6. break及continue
这和Bourne Shell的break 及continue相似,是用来中断foreach 及while 回
圈。

7. switch
这和Bourne Shell的case相似。

语法如下
switch (string)
case pat1:
breaksw
case pat2:
commands2
breaksw
case pat3:
commands3
breaksw
endsw
□附录A expr命令
命令格式
expr expression
叙述
expression是由字串以及运算子所组成,每个字串或是运算子之间必须用空白隔开。

下表是运算子的种类及功能,而优先顺序则以先後次序排列,我们可以利用小括
号来改变运算的优先次序。

其运算结果则输出至标准输出上。

: 字串比较。

比较的方式是以两字串的第一个字母开始,而以第二个字串的
字母结束。

如果相同时,则输出第二个字串的字母个数,如果不同时则传
回0 。

* 乘法
/ 除法
% 取馀数
+ 加法
- 减法
< 小於
<= 小於等於
= 等於
!= 不等於
>= 大於等於
> 大於
& AND运算
| OR运算
当expression中含有”*”, “(”, “)”等符号时,必须在其前面加上””,以免被
Shell 解释成其它意义。

expr 2 * ( 3 + 4 ) 其输出为14
□附录B test命令
命令格式
test expression
叙述
expression中包含一个以上的判断准则以作为test评诂的标准。

两准则间用”-a”代
表逻辑AND 运算,”-o”代表逻辑OR运算,而在准则前放置一”!”代表NOT 运算。


果没有括号,则优先权则为”!” > “-a” > “-o”。

和expr命令相同,相使用左右括
号时,必须在其前面加上””。

以下是有关准则的叙述(合叙述时传回真,否则传
回伪):
string string不为空白字串
-n string string的长度大於0
-z string string的长度等於0
string1=string2 string1等於string2
string1!=string2 string1不等於string2
int1 -gt int2 int1大於int2
int1 -ge int2 int1大於等於int2
int1 -eq int2 int1等於int2
int1 -ne int2 int1不等於int2
int1 -le int2 int1小於等於int2
int1 -lt int2 int1小於int2
-r filename 档案可读取
-w filename 档案可写入
-x filename 档案可执行
-f filename 档案为一般档
-d filename 档案为目录
-s filename 档案为非空的一般档test -r “$filename” -a -s “$filename”。

相关文档
最新文档