Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103687903
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类:

2008-04-18 22:41:38

作者:KornLee  出处:Unix爱好者家园unix-cd.com   
使用argv[*]特殊参数变量,可以直接引用命令行参数.下例中,当调用shell脚本
cbackuparg时,在命令行下输入C程序文件的列表,在foreach循环中,argv[*]引用
命令行中的所有参数,将按顺序把各个参数赋值给变量backfile,变量argnum用于
引用每个参数.显示参数和backfile的值来说明它们两个是相同的.
代码:
cbackuparg
#
@ argnum=1
foreach backfile ($argv[*])
    cp $backfile sourcebak/$backfile
    echo "$backfile $argv[$argnum]"
    @ argnum=$argnum+1
end

%cbackuparg main.c lib.c io.c
main.c main.c
lib.c lib.c
io.c io.c

17,history
格式:
history [-hr][n]
history -S|-L|M [filename]
history -c
如果history没有任何参数,将显示开行号的历史命令列表.用作参数的号码将列出
行的最后号码.如果没有任何选项参数,她将用作历史文件名;否则,将使用hisfile
变量值.
用-h选项,将以注释的形式显示不带行号的历史文件列表
用-r选项,将反向显示,以最近的列表开始
用-c选项,则清除历史列表
如果用-S选项,可以把历史列表存入文件,如果savehist shell变量的第一个单词
被设置为数值,历史文件将被保存为最大的行数,如果第二单词为'merge',历史列表
将被合并到当前的历史文件中,而不替代历史列表,时间图章排序历史列表.
如果用-L选项,shell将从存储的历史列表文件中读取历史列表并把她追加到当前
历史列表中.
如果用-M选项,将从历史文件读取历史列表信息,但用当前历史列表信息合并,排序
历史列表.
如果没有用这些选项给出文件名,那么,就使用赋值到histfile shell变量的文件
名,如果没有设置histfile,就使用~/.history.

18,hup
格式:
hup [command]
如果带有括起来的command参数,hup运行command,根据停机信号退出.当shell退出时,
hup安排shell发出停机信号.注意:命令也许设置自己的停机响应,重写hup,如果没有
参数(只有在shell脚本中才允许),hup使shell根据脚本的余项的停机信号退出.

19,if-then
格式:
if (expression) then
command
endif
if-then结构把条件放入几个linux命令,该条件是expression,如果expression得出
非零的数值,那么expression为真,执行if结构内的命令,如果expression得出零值
那么expression为假,就不执行if结构内的命令.
if-then结构以if关键词开始,expression表达式用()括起来,关键词then后可以跟
任意数量的linux命令,以关键词endif结束if命令.注意:在TCSH中,if (expressiong)
和then必须在同一行!
举例:
代码:
ifls
#
echo -n "Please enter option:"
set option=$<
if ($option=="s") then
    echo List files by size
    ls -s
endif

%tcsh ifls
Please enter option: S
List files by size
total 2
1 monday 2 today
%

20,if-then-else
格式:
if (expressiong) then
command
else
command
endif
用户需要经常需要根据expression是真还是假来进行选择.关键词else允许if结构
在两者之间选择,如果expression为真,那么执行第一个command,否则,执行第二个
就是else后面的command.
举例:
代码:
elsels
#
echo Enter s to list file sizes
echo otherwise all file information is listed
echo -n "please enter option:"
set option=$<
if ($option=="s") then
    ls -s
        else
    ls -l
endif
echo Good-bey
(结果略)

21,jobs
格式:
jobs [-l]
此命令列出所有活动的任务,如果带-l选项,将列出进程号,以及正常的信息.

22,kill
格式:
kill [-signal] %job\pid...
kill -l
此命令用于终止进程或者任务,如果带-signal选项,应该指定要发送的信号,默认发送
的信号是SIGTERM,如果带有-l选项,则列出信号名,对于带-l选项提供的信号数,将
列出与其相关的信号名.

23,logout
此命令用于终止注册shell,如果设置了ignoreeof,它将非常有用.

24,nice
格式:
nice [+ number][command]
此命令设置shell调整优先为number,如果没有设置number,调整优先设置为4,带有
指定的command,nice适当的优先运行command,number值越大,进程获得的CPU的时间
就越少.

25,nohup
格式:
nohup [command]
如果不带command参数,nohup指示shell忽略任何停机信号,如果带command参数,将
执行此命令并忽略执行中的任何停机信号.

26,notify
格式:notify [%job...]
Linux执行命令后,如果有后台任务在执行,系统将通知到目前为止已经完成的后台
任务,该系统不会中断如编辑这样的操作来通知用户关于完成的任务,当某任务完成
时,如果想马上知道,无论系统在作什么,可以使用notify命令指令系统通知用户,它的
参数作为任务号,当任务完成时,系统将中断当前命令并通知用户任务已经完成,如:
%notify %2
当2号任务完成时,告诉系统通知用户.

27,onintr
格式 onintr [-|label]
此命令控制shell在中断时的动作,不带任何参数,将回复shell中断默认的动作,将
终止shell脚本或返回输入级的终止符,如果带-参数,则忽略全部的中断,当接受中断
或当子进程终止时,带label的命令将使shell执行goto标号.

28.popd
格式 popd [-p][-l][-n|-v][+n]
此命令从目录列表中删除一个目录,不带参数的命令从列表中删除顶层目录,+n删除
从左起的第n层的目录.然后popd显示最终的目录列表.pushdsilent shell变量可以
设置为支持此特性,-p选项可以重写pushdsilent.

29.printenv
格式:
printenv [name]
此命令显示环境变量的名和值,如果带name参数,仅仅显示环境变量name的值.

30.pushd
格式:
pushd [-p][-l][-n|-v][name|+n]
此命令把目录添加到存储的目录列表中,然后显示目录列表,如不带参数,除非目录
为空,pushd交换顶层的两个目录,并返回0.
+n旋转列表以便使第n个目录(从左起)列与顶端,但是,如果设置了dextract,pushd +n
将展开第n个目录,把它压入堆栈顶层.
-n旋转堆栈以便第n个目录(从右起)列于顶端,dir把dir添加到顶端的目录列表,是她
成为新的当前目录.如果设置了pushtohome,不带参数的pushd命令执行pushd ~的
功能,像cd的功能一样,如果dunique被设置,pushd在压入堆栈之前从堆栈中删除任何
的name历程,可以设置pushdsilent shell变量来取消目录列表的显示,然后可以使用
-p选项重写pushdsilent.

31,repeat
格式:
repeat count command
此命令重复执行command指定的次数count.

32,set
格式:
set
set name ...
set name = value ...
set name = (wordlist)...
set name[index] = word ...
set -r
set -r name ...
set -r name = value ...
set -r name = (wordlist) ...
不带任何参数的set命令将显示全部的shell变量值,包含许多单词的变量作为放在
括号中的词列出,带name参数的set命令定义一个变量并为它赋值null串,带有name
和=符号分隔的值,set定义变量并给它赋值,要把wordlist作为值赋值给name变量,
把列表中的词作为要赋的值放在括号中,为了将数值赋值给数组元素,,使用方括号
[]指定元素的index,但是该元素必须已经存在.
-r选项常用于引用只读变量,仅仅带-r选项的set命令将列出只读变量,与变量名一起
使用,set将使此变量设置为只读,与赋值的变量一起使用,将初始化该变量,并使该
变量成为不能被修改的只读变量.
在TCSH中,用户必须在使用变量之前首先声明它,使用加变量名的set命令声明变量.
变量名可以是任何字母字符包括下划线_,也可以含有数字,但是变量名不能以数字为
首字符!

33,setenv
格式:
setenv [name[value]]
setenv常用于定义有特定值的环境变量.如没有带value选项,setenv设置name变量
为null串,如果没有带任何参数,将显示全部环境变量的名称和值.
TCSH有两种类型的变量:局部变量和环境变量.局域变量是在shell内部声明的;环境
变量是全局域的变量.使用setenv可以定义环境变量,使用setenv命令,变量名,以及
被赋值的值,就可给环境变量赋值.其中,没有赋值运算符,如:
%setenv greeting hello
greeting环境变量被赋值为hello
无论何时调用shell脚本,都将产生自己的shell,如果shell脚本被另外一个shell脚本
执行,它将使自己的shell从第一脚本的shell中分离.现在有两个shell,属于第一个
脚本的父shell和当执行第二个脚本是产生的子shell.在其他的shell内部执行脚本
时,这个shell是第一个脚本的子shell,原来的脚本的shell是它的父shell.
每个shell都拥有自己的变量,子shell不能引用父shell中的局域变量,但是能引用
环境变量.子shell可以引用父shell中声明的任何环境变量.

34,shift
格式:
shift [variable]
没有参数的shift命令向左移动argv数值,即argv[1]的数值被argv[2]所代替,如果
argv没有被设置或者数值少于一个词时将发声错误.带有其数值为列表或数组的
variable,该命令将列表和数组的数值向左移动.

35,source
格式:
source [-h] name [argument...]
source读出并执行以name命名的命令,通常是shell脚本(不能把这些命令放在历史
列表中).把任何参数输入argv中.用-h选项,命令被放入历史列表但是不立即执行.

36.stop
格式:
stop %job\ job...
stop命令停止指定的任务或在后台执行的进程.也可以用一个数字或字符串引用一个
任务,如果不存在默认的任务,那么仅仅stop不能停止当前的任务.

37,switch
格式;
代码:
switch (test-string)
    case pattern:
         commands
breaksw
    case pattern:
         commands
         breaksw
    default:
         commands
         breaksw
endsw

switch结构在几个可能的选项中进行选择.此结构与BASH中的case结构非常类似
通过把字符串与几个可能的模式进行选择,每个可能的模式都与一系列命令相关
联,如果没有相匹配的项,则执行相关的命令,.switch结构以关键词switch和放在
圆括号中的test-string开始,字符串常由变量求值导出,然后是一系列的模式,每个
模式pattern前是关键词case,以冒号:结束,冒号后列出与选择有关的commands,以
breaksw终止command,在所有被列出的模式之后,关键词endsw结束switch结构,注意,
每个测试表达式的命令组的最后一个命令是breaksw,每个测试表达式被逐一测试,
直到找到相匹配的内容,如果没有找到相匹配的项,则执行默认项default.用关键词
default表示默认选择,default项是可选的.但是它有助于通知用户没有匹配的测试
字符串.举例:
代码:
lschoice
#
echo s.List sizes
echo l.List files infomation
echo c.List C files
echo -n "Please enter choice:"
set choice=$<
switch ($choice)
  case s:
    ls -s
    breaksw
  case l:
    ls -l
    breaksw
  case c:
    ls *.c
    breaksw
  default:
    echo Invalid Option
    breaksw
endsw

(输出略)

38,time
格式:
time [command]
如果没有参数,此命令显示当前shell的时间累计,用一条命令作为参数,它执行命令
并显示时间累计.

39,umask
格式:
umask [value]
此命令指定用户文件建立掩码,掩码用八进制表示.

40,unalias
格式:
unalias pattern
此命令删除其名称与pattern匹配的所有别名.

41,unset
格式:unset pattern
此命令取消定义shell变量,名称可能是匹配了几个变量的pattern(尽量避免用
unset *,因为它将取消所有的变量)

42,unsetenv
格式:
unsetenv pattern
此命令取消定义环境变量,名称可能是匹配几个变量的pattern,也尽量避免用
unsetenv *,因为它将删除所有的环境变量.

43,wait
此命令指示shell等待全部的后台任务的完成,在一个交互的shell环境中,可中断
一个wait操作,并显示剩余的任务.

44,where
格式:where command
此命令报告所有已知的命令历程,包括别名,内建和可执行的路径.

45,which
格式:
which command
此命令显示shell要执行的指定的任务.

46,while
格式:
while(expression)
command
end
此循环重复执行命令,以关键词while开始,接着是圆括号括起来的表达式expression
以end结束循环.
while循环很容易与switch结构结合,构成菜单的驱动程序.举例:
代码:
lschoicesw
#
set again=yes
while ($again==yes)
echo "1.List sizes"
echo "2.List files information"
echo "3.List C files"
echo "4.Quit"
echo -n "Please enter choice:"
set choice=$<
switch ($choice)
  case 1:
    ls -s
    breaksw
  case 2:
    ls -l
    breaksw
  case 3:
    ls *.c
    breaksw
  case 4:
    set again=no
    echo good-bey
    breaksw
  default:
    echo Invalid Option
endsw

阅读(398) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~