📄 tcsh shell 编程入门 linuxsir_org.htm
字号:
size=3><B><BR>2、alias<BR></B></FONT>
<P></P>
<P><B>格式:</B>alias [name[command]]</P>
<P>关键词<BR>
<DIV class=codeblock><CODE>alias 别名name 引用的命令command</CODE></DIV>
<P></P>
<P>如:<BR>
<DIV class=codeblock><CODE>alias list ls<BR>alias list 'ls
-l'</CODE></DIV>
<P></P>
<P><FONT id=6.3 size=3><B><BR>3、argv<BR></B></FONT></P>
<P>当脚本被执行时,命令行中的单词被分析并放入argv数组中。argv[0],argv[1]...argv[n],其中argv[0]保存命令名,argv[1]保存命令的第一个参数,argv[n]命令的第n个参数。argv数组元素可缩写元素号码,前面加$。</P>
<P>如:$argv[1]写为$1;$argv[*]写为$*。#argv参数标识符包含输入在命令行中的参数号码,可检查$#argv变量。如:<BR>
<DIV class=codeblock><CODE>arglist<BR>#<BR>echo "The number of arguments
entered is $#argv"<BR>echo "The list of arguments is : $argv[*]"<BR>%tcsh
arglist a b c<BR>The number of arguments entered is 3<BR>The list of
arguments is : a b c</CODE></DIV><BR><B><BR>argv变量列表:<BR></B><BR>
<DIV class=codeblock><CODE>命令行参数 说明<BR>$argv[0]或$0 命令名<BR>$argv[n]或$n
从1($1-$)开始的第n个命令行参数<BR>$argv[*]或$* 从1开始的所有命令行参数<BR>$#argv或$#
命令行参数的计数</CODE></DIV><BR><FONT id=6.4 size=3><B><BR>4、bg<BR></B></FONT>
<P></P>
<P><B>格式:</B>bg [%job]</P>
<P>bg命令把指定的任务放入后台。如果此任务已经停止,则继续执行,如果没有参数,将当前任务放入后台。(详细用法与BASH相同此处略)<BR><FONT
id=6.5 size=3><B><BR>5、break<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>break</CODE></DIV>
<P></P>
<P>break命令用于退出最接近的foreach/while循环过程,执行同一行中其他的命令。<BR><FONT id=6.6
size=3><B><BR>6、breaksw<BR></B></FONT></P>
<P><B>格式:</B>breaksw</P>
<P>可以从switch语句处中断,在endsw后继续执行。<BR><FONT id=6.7
size=3><B><BR>7、builtins<BR></B></FONT></P>
<P>列出全部shell的内建命令表.</P>
<P><FONT id=6.8 size=3><B><BR>8、cd<BR></B></FONT></P>
<P><B>格式:</B>cd [-p][-l][-nl -v][name]</P>
<P>如果给出目录名,此命令把name设置为当前目录,如果命令中没有name,当前目录自动设置成用户主目录。用于name的"-"引用上一级目录,如果参数name没有给出子目录,或不是全路径,或使用./或../引用当前目录及父目录,那么就检查在cdpath
shell变量中列出的目录来寻找该目录名。如果此操作失败,将检查shell变量中是否保存着的目录路径名。</P>
<P>用-p选项,linux显示目录列表, 用-l,-n,-v选项与用在dirs命令中的选项完全相同。</P>
<P>默认选项-p ;<BR><FONT id=6.9 size=3><B><BR>9、continue<BR></B></FONT></P>
<P>此命令继续执行最靠近while/foreach语句,当前行其余的命令被执行。</P>
<P><FONT id=6.10 size=3><B><BR>10、dirs<BR></B></FONT></P>
<P><B>格式:</B>dirs [-l][-n|-v]<BR>
<DIV class=codeblock><CODE>dirs -S|-L [filename]<BR>dir -c</CODE></DIV>
<P></P>
<P>如果不带参数,dirs将显示目录列表,列表开头被列在作侧,第一个目录是当前目录。带-l选项,用户主目录中的全部子目录被展开。输入项在到达屏幕边缘时,-n选项隐藏输入项,-v选项显示每一行的输入项入口,-c选项将清除目录列表,-S选项可以把目录列表作为一系列的cd和pushed命令保存在文件中,-L选项可以从指定的文件中将cd和pushed命令读入,该文件包含-S选项所存储的cd和pushed命令。如果没有指定的文件名,将使用赋值到dirsfile
shell变量中的文件名。如果没有设置dirsfile,将使用~/.cshdirs,在启动时注册shell将对dirs
-L求值,如果设置了savedirs,退出前使用dirs
-S,由于在~/.cshdirs之前,仅仅~/.tcshrc是正常来源,dirsfile应该以~/.tcshrc设置而不是以~/.login设置.</P>
<P><FONT id=6.11 size=3><B><BR>11、echo<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>echo [-n] word/string</CODE></DIV>
<P></P>
<P>此命令把每个单词或字符串写入shell的标准输出.可设置echostyle
shell变量来仿真选项以及BSD的换码序列或者echo的System V 版本;</P>
<P><FONT id=6.12 size=3><B><BR>12、eval<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>eval argument...</CODE></DIV>
<P></P>
<P>此命令把参数作为shell的输入,执行当前shell的上下文中的结果命令,由于分析发声在替换前,所以该命令通常用于执行命令或变量替代所产生的命令。</P>
<P><FONT id=6.13 size=3><B><BR>13、exec<BR></B></FONT></P>
<P><B>格式:</B>exec command</P>
<P>此命令代替当前的shell执行指定的命令,并退出终端;</P>
<P><FONT id=6.14 size=3><B><BR>14、exit<BR></B></FONT></P>
<P><B>格式:</B> exit [expression]</P>
<P>shell可以带指定的表达式的值退出,如果没有包含表达式,也可带状态变量值退出。<BR><FONT id=6.15
size=3><B><BR>15、fg<BR></B></FONT></P>
<P><B>格式:</B>fg [%job...]</P>
<P>把指定的任务带到前台,如果任务在终止状态,在带到前台的同时使他运行;job参数是使用任务号或者下列字符串之一的任务引用:' % +
-<BR><FONT id=6.16 size=3><B><BR>16、foreach<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>foreach variable(list of
values)<BR>commands<BR>end</CODE></DIV>
<P></P>
<P>foreach结构被设置为顺序引用数值列表,它类似BASH shell的for in
结构.foreach结构产生两个操作数:一个变量和一组包含在()中的数值列表.将列表中的值赋值到结构中的变量中.循环体的结尾由语句end构成.下例中脚本list输出由项目和foreach循环读取每一项当前的日期构成的一行信息,列表中的每一项被连续赋值到变量object
list<BR>
<DIV class=codeblock><CODE>#<BR>set tdate=`date +%D`<BR>foreach
object(milk cookies apples cheese)<BR>echo $object $tdate<BR>end<BR>%tcsh
list<BR>milk 04/26/03<BR>cookies 04/26/03<BR>apples 04/26/03<BR>cheese
04/26/03</CODE></DIV>
<P></P>
<P>使用foreach循环有助于管理文件,可以模式中的shell特定字符来产生用作数值列表的文件名列表,然后所产生的文件名列表就成为foreach结构引用的列表.如果在列表中不带任何变量,可以使用命令行参数实现循环.<BR>
<DIV class=codeblock><CODE>list<BR>#set tdate=`date +D%`<BR>foreach
object($argv[*])<BR>echo "$object $tdate"<BR>end<BR>%tcsh list a b c<BR>a
04/26/03<BR>b 04/26/03<BR>c 04/26/03</CODE></DIV>
<P></P>
<P>使用argv[*]特殊参数变量,可以直接引用命令行参数。下例中,当调用shell脚本cbackuparg时,在命令行下输入C程序文件的列表,在foreach循环中,argv[*]引用命令行中的所有参数,将按顺序把各个参数赋值给变量backfile,变量argnum用于引用每个参数。显示参数和backfile的值来说明它们两个是相同的。</P>
<P>
<DIV class=codeblock><CODE>cbackuparg<BR>#<BR>@ argnum=1<BR>foreach
backfile ($argv[*])<BR> cp $backfile
sourcebak/$backfile<BR> echo "$backfile
$argv[$argnum]"<BR> @
argnum=$argnum+1<BR>end</CODE></DIV>
<P></P>
<P>
<DIV class=codeblock><CODE>%cbackuparg main.c lib.c io.c<BR>main.c
main.c<BR>lib.c lib.c<BR>io.c io.c</CODE></DIV>
<P></P>
<P><FONT id=6.17 size=3><B><BR>17、history<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>history [-hr][n]<BR>history -S|-L|M
[filename]<BR>history -c</CODE></DIV>
<P></P>
<P>如果history没有任何参数,将显示开行号的历史命令列表。用作参数的号码将列出行的最后号码,如果没有任何选项参数。她将用作历史文件名;否则,将使用hisfile变量值。</P>
<P>用-h选项,将以注释的形式显示不带行号的历史文件列表<BR>用-r选项,将反向显示,以最近的列表开始<BR>用-c选项,则清除历史列表</P>
<P>如果用-S选项,可以把历史列表存入文件,如果savehist
shell变量的第一个单词被设置为数值,历史文件将被保存为最大的行数,如果第二单词为'merge',历史列表将被合并到当前的历史文件中,而不替代历史列表,时间图章排序历史列表。</P>
<P>如果用-L选项,shell将从存储的历史列表文件中读取历史列表并把她追加到当前历史列表中。<BR>如果用-M选项,将从历史文件读取历史列表信息,但用当前历史列表信息合并,排序历史列表。</P>
<P>如果没有用这些选项给出文件名,那么就使用赋值到histfile
shell变量的文件名,如果没有设置histfile,就使用~/.history。<BR><FONT id=6.18
size=3><B><BR>18、hup<BR></B></FONT></P>
<P><B>格式:</B></P>
<P>hup
[command]<BR>如果带有括起来的command参数,hup运行command,根据停机信号退出。当shell退出时,hup安排shell发出停机信号。注意:命令也许设置自己的停机响应,重写hup,如果没有参数(只有在shell脚本中才允许),hup使shell根据脚本的余项的停机信号退出。</P>
<P><FONT id=6.19 size=3><B><BR>19、if-then<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>if (expression)
then<BR>command<BR>endif</CODE></DIV>
<P></P>
<P>if-then结构把条件放入几个linux命令,该条件是expression,如果expression得出非零的数值,那么expression为真,执行if结构内的命令,如果expression得出零值那么expression为假,就不执行if结构内的命令。</P>
<P>if-then结构以if关键词开始,expression表达式用()括起来,关键词then后可以跟任意数量的linux命令,以关键词endif结束if命令。注意:在TCSH中,if
(expressiong)和then必须在同一行!</P>
<P><B>举例:</B></P>
<P>
<DIV class=codeblock><CODE>ifls<BR>#<BR>echo -n "Please enter
option:"<BR>set option=$<<BR>if ($option=="s")
then<BR> echo List files by
size<BR> ls -s<BR>endif</CODE></DIV>
<P></P>
<P>
<DIV class=codeblock><CODE>%tcsh ifls<BR>Please enter option: S<BR>List
files by size<BR>total 2<BR>1 monday 2 today<BR>%</CODE></DIV>
<P></P>
<P><FONT id=6.20 size=3><B><BR>20、if-then-else<BR></B></FONT></P>
<P><B>格式:</B></P>
<P>
<DIV class=codeblock><CODE>if (expressiong)
then<BR>command<BR>else<BR>command<BR>endif</CODE></DIV>
<P></P>
<P>用户需要经常需要根据expression是真还是假来进行选择;关键词else允许if结构在两者之间选择;如果expression为真,那么执行第一个command,否则执行第二个就是else后面的command。</P>
<P><B>举例:</B></P>
<P>
<DIV class=codeblock><CODE>elsels<BR>#<BR>echo Enter s to list file
sizes<BR>echo otherwise all file information is listed<BR>echo -n "please
enter option:"<BR>set option=$<<BR>if ($option=="s")
then<BR> ls
-s<BR> else<BR> ls
-l<BR>endif<BR>echo Good-bey</CODE></DIV>
<P></P>
<P>(结果略)<BR><FONT id=6.21 size=3><B><BR>21、jobs<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>jobs [-l]</CODE></DIV>
<P></P>
<P>此命令列出所有活动的任务,如果带-l选项,将列出进程号,以及正常的信息.<BR><FONT id=6.22
size=3><B><BR>22、kill<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>kill [-signal] %job\pid...<BR>kill
-l</CODE></DIV>
<P></P>
<P>此命令用于终止进程或者任务,如果带-signal选项,应该指定要发送的信号,默认发送的信号是SIGTERM,如果带有-l选项,则列出信号名,对于带-l选项提供的信号数,将列出与其相关的信号名。<BR><FONT
id=6.23 size=3><B><BR>23、logout<BR></B></FONT></P>
<P>此命令用于终止注册shell,如果设置了ignoreeof,它将非常有用;<BR><FONT id=6.24
size=3><B><BR>24、nice<BR></B></FONT></P>
<P><B>格式:</B><BR>
<DIV class=codeblock><CODE>nice [+ number][command]</CODE></DIV>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -