C语言网

 找回密码
 加入社区!

QQ登录

只需一步,快速开始

楼主: jiangbowen

C shell [复制链接]

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:23:03 |显示全部楼层
调用shell
可以按下面的方式来调用C shell 命令解释器:
csh [options] [arguments]
csh 从一个终端或文件中执行命令。在调试脚本的时候,选项-n、-v 和-x 是有用
的。
下面对这些选项进行了详细的解释:
-b 允许余下的命令行选项作为一个指定命令的选项来解释,而不是作为csh本身的
选项。
-c 将第一个参数作为一个要执行的命令的字符串。余下的参数通过argv数组可以使
用。
-e 如果一个命令产生错误,则退出。
-f 快速启动,不用执行.cshrc 或.login 就可以启动csh。
-i 调用交互式shell(可提示输入)。
-n 解析命令但不执行。
-s 从标准输入读命令。
-t 执行一个命令后退出。
-v 执行命令前显示命令,扩展历史替代但不扩展其他的替代(如文件名、变量和命
令)。与设置verbose 作用相同。
-V 与设置-v 作用相同,但也显示.cshrc。
-x 执行命令之前先显示命令,但扩展所有的替代。与设置echo作用相同。经常将
-x 和-v 结合使用。
-X 与-x 作用相同,但也显示.cshrc。

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:23:20 |显示全部楼层
内置的C shell 命令
# #
忽略在同一行中跟在它后面的所有文本。shell 脚本把它作为注释符
而不是一个真正的命令来使用。另外,一些旧的系统有时会将第一个
字符为# 的文件作为一个C shell 脚本来解释。
#! #!shell [option]
用于一个脚本的第一行来调用指定shell。该行的其余部分作为单个
的参数传递给shell。该功能一般由内核实现,但一些旧系统可能不
支持该功能。一些系统对shell的最大长度有32个字符的限制。例如:
#!/bin/csh -f
: :
空命令(什么也不做)。返回一个退出状态0。
alias alias [name[command]]
指定name 为命令command 的缩写名称或别名。如果省略了参数
command,则输出name 别名,如果也省略了name,则输出所有的
别名。别名可以在命令行上定义,但更常存储在.cshrc 中,以便在
登录之后生效(参见本章前面的“.cshrc 文件示例”)。别名定义可
以引用命令行参数,与历史列表相似。用/!* 指所有的命令行参数,
用 /!^ 指第一个参数,用/!$ 指最后一个参数等等。一个别名name
可以是任何有效的Unix 命令,然而,如果不键入\name,则会丧失
其最初的意思。参见unalias。
示例
在X window 系统中设置xterm 窗口的尺寸:
alias R ,set noglob; eval `resize`; unset noglob,
显示包含了字符串ls 的别名:
alias | grep ls
在所有的命令行参数上运行nroff:
alias ms ,nroff -ms \!*,
拷贝被指定为第一个参数的文件:
alias back ,cp \!^ \!^.old,
使用常规的ls,而不是它的别名:
% \ls

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:25:13 |显示全部楼层
bg bg [jobIDs]
将当前的作业或jobIDs 放至后台。参见前面的“作业控制”部分。
示例
为了将一个消耗时间的进程放在后台,用户可以使用下面命令:
4% nroff -ms report | col > report.txt
CTRL-Z
然后使用下面的任何一种方式:
5% bg
5% bg % 当前作业
5% bg %1 作业号1
5% bg %nr 匹配词首字符串nroff
5% % &
break break
继续执行距离while 或foreach 最近的、在end 命令后的命令。
breaksw breaksw
终止一个switch 语句,然后继续执行endsw 之后的命令。
case case pattern
在switch 语句中标识模式pattern。
cd cd [dir]
将工作目录修改为dir,默认为用户的主目录。如果dir 是一个相对的
路径名而不是当前目录,则搜索变量cdpath。参见本章前面的
“.cshrc 文件示例”部分。
chdir chdir [dir]
与cd命令作用相同。如果希望重新将cd定义为别名, 则可以使用该
命令。
continue continue
继续执行while 和foreach 的下一次迭代循环。
default default:
规定switch 语句中默认的情况(通常在最后)。
dirs dirs[-l]
输出目录堆栈,首先显示当前目录,用-l将主目录符号(~)扩展为
实际的目录名。参见popd 和pushd。
echo echo [-n] string
将字符串string 写到标准输出中,如果指定了-n,输出不会被换行
符中断。和Unix 版本及Bourne shell 版本不一样(/bin/echo),C
shell 中的echo 不支持转义字符。也可以参见第二章和第四章中的
echo 命令。
end end
用于结束foreach 和while 语句的保留字。

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:26:55 |显示全部楼层
endif endif
用于结束if 语句的保留字。
endsw endsw
用于结束switch 语句的保留字。
eval eval args
一般地,eval用于shell 脚本中,并且args 是一行包含了shell 变量
的代码。eval首先强制变量扩展,然后运行生成的命令。当shell 变
量包含了输入/ 输出重定向符号、别名或其他shell 变量的时候,这种
两次搜索是有用的。(例如,正常情况下重定向发生在变量扩展之前,
因此一个包含了重定向符号的变量必须首先用eval扩展,否则会无
法解释那个重定向符号。)可以参见第四章中eval下面的示例。下面
也列出了eval的其他用法。
示例
下面的代码用于.login 文件中来确定终端属性。
set noglob
eval ,tset -s xterm,
unset noglob
下面的命令显示了eval 的用法:
% set b=,$a,
% set a=hello
% echo $b 读命令行一次
$a
% eval echo $b 读命令行两次
hello
exec exec command
执行command 来代替当前shell,这将终止当前的shell,而不是在它
下面创建一个新的进程。
exit exit [(expr)]
退出一个shell 脚本,退出时带有expr 指定的状态。零状态意味着成
功,非零状态意味着失败。如果没有指定expr,则退出值就是status
变量的值。可以在命令行执行exit 以关闭一个窗口(退出)。
fg fg [jobIDs]
将当前的作业或jobIDs 放到前台。可以参见前面的“作业控制”部
分。
示例
如果用户挂起了一个vi 编辑会话(通过按CTRL-Z),那么用户就可
以用下面命令中的任何一种继续vi 的执行:
8% %
8% fg
8% fg %
8% fg %vi 匹配词首的字符串
foreach foreach name (wordlist)
commands
end
将变量name 赋给wordlist 中的每个值,并且执行在foreach 和end
之间的命令。用户可以将foreach作为在C shell 提示符下的多行命
令来使用(第一个示例),也可以将它用在一个shell 脚本中(第二个
示例)。
示例
对所有以大写字母开头的文件重命名:
% foreach i ([A-Z]*)
? mv $i $i.new
? end
检查每个命令行参数是否是一个选项:
foreach arg ($argv)
# does it begin with - ?
if ("$arg" =~ -*) then
echo "Argument is an option"
else
echo "Argument is a filename"
endif
end

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:27:39 |显示全部楼层
glob glob wordlist
对wordlist 作文件名替代、变量替代和历史替代。这种扩展更像
echo,只是不能识别\ 转义,并且单词间是用空字符作为定界符的。
glob 通常用于在shell 脚本中对一个值进行“硬编码”,以使其在脚
本的其余部分保持一致。
goto goto string
跳到第一个非空字符是string 且其后跟着一个:的一行,然后继续执
行该行下的代码。在goto 行上,string 可能是一个变量或文件名模
式,但要分支去的标签必须是一个字面上的、被扩展的值,且不能出
现在一个foreach 或while 语句的内部。
hashstat hashstat
显示一个统计,该统计表明了通过path变量来定位命令的散列表的
成功级别。
history history [option]
显示历史事件的列表(在前面的“命令历史”中曾讨论了历史语法)。
注意:多行复合命令(例如foreach...end)不存储在历史列表中。
options
-h 不带事件序号输出历史列表。
-r 按倒置顺序输出,最后显示最早的命令。
n 只显示最后的n 条历史命令,而不是由shell 变量history设置
的数字。
示例
保存并执行最后5 条命令:
history -h 5 > do_it
source do_it
if if
开始一个条件语句,简单的格式是:
if (expr) cmd
下面并排显示了三个可能的其他格式:
if (expr) then if (expr) then if (expr) then
cmds cmds1 cmds1
endif else else if (expr)then
cmds2 cmds2
endif else
cmds3
endif
在最简单的形式中,如果expr 为真,则执行cmd;否则什么也不做
(重定向仍旧发生,这是一个bug)。在其他形式中,执行一个或多个
命令。如果expr 为真,则继续执行then后的命令;如果expr 为假,
则分支到else(或else if 之后并且继续检查)后面的命令。更多
的示例可以参见前面的“表达式”,或shift 和while。
示例
如果没有指定命令行参数,则执行一个默认的行为:
if ($#argv == 0) then
echo "No filename given. Sending to Report."
set outfile = Report
else
set outfile = $argv[1]
endif
jobs jobs [-l]
列出所有正在运行或停止的作业,-l 包括进程ID。例如,用户可以
检查长编译或文本格式化是否仍在运行。在退出前也是有用的。

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:28:09 |显示全部楼层
kill kill [options] ID
终止每个指定的进程ID或作业ID。用户必须拥有该进程,或者是特
权用户。这个内置命令与第二章中的/usr/bin/kill类似,但也允
许符号作业名称。难处理的进程可以用信号9去终止。参见前面的“作
业控制”。
options
-l 列出信号名(用于本身)。
-signal
信号编号(来自/usr/include/sys/signal.h)或信号名(来
自kill -l)。采用了信号9 的kill 是“绝对的”。
信号
在/usr/include/sys/signal.h中定义了信号,在这里不带SIG前
缀列出了这些信号。在用户的系统中可能有比这更多的信号。
HUP 1 挂起
INT 2 中断
QUIT 3 退出
ILL 4 非法指令
TRAP 5 跟踪陷阱
IOT 6 IOT 指令
EMT 7 EMT 指令
FPE 8 浮点异常
KILL 9 终止
BUS 10 总线错误
SEGV 11 段冲突
SYS 12 系统调用了错误参数
PIPE 13 向管道中写,但没有进程来读
ALRM 14 时钟报警
TERM 15 软件终止( 默认信号)
USR1 16 用户定义信号1
USR2 17 用户定义信号2
CLD 18 子进程终止
PWR 19 电源失败后重启
示例
如果你使用了如下命令:
44% nroff -ms report > report.txt &
[1] 19536 csh 输出作业和进程ID
你可以使用下面的任何一种方式终止它:
45% kill 19536 进程ID
45% kill % 当前作业
45% kill %1 作业号1
45% kill %nr 词首的字符串
45% kill %?report 匹配字符串

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:28:54 |显示全部楼层
limit limit [-h] [resource [limit]]
显示限制,或对当前进程和它创建的进程使用的资源进行限制。如果
不给出l i m i t ,则只输出对resource 的当前限制。如果也省略了
resource,则输出所有的限制。默认情况下会显示或设置当前的限
制。使用-h 时,则使用硬限制。一个硬限制强加一个不能超越的绝
对限制。只有特权用户才可以提高它。参见unlimit。
resource(资源)
cputime
CPU 能花费的最大秒数,可以缩写为cpu。
filesize
任何一个文件的最大长度。
datasize
数据(包括栈)的最大长度。
stacksize
栈的最大长度。
coredumpsize
核心转储文件的最大长度。
limit(限制)
一个数字后跟着一个可选的字符(单位说明符)。
对于cputime: nh(n 小时)
nm(n 分钟)
mm:ss(分钟和秒)
对于其他的: nk(n 千字节,默认)
nm(n 兆字节)
login login [user|-p]
用/bin/login 代替用户user 的登录shell。-p 保持了环境变量。
logout logout
终止登录的shell 。
nice nice [±n] command
改变command 的执行优先权;如果什么也没给出,则改变当前shell
的优先权(参见第二章中的nice),该优先权的范围是-20 至20,默
认为4。该范围的优先顺序和我们所想像的相反:-20 给出最高的优
先权(最快地执行),20 给出最低的优先权。
+n 对优先权值加n(降低作业优先权)。
-n 对优先权值减n(提高作业优先权)。只能由特权用户使用。
nohup nohup [command]
“没有挂起的信号”。在关闭终端行后(即,当挂断一个电话或退出时)
不终止command。在shell 脚本中使用没有command 的nohup 命令,
以使脚本不被终止(参见第二章中的nohup)。
notify notify [jobID]
当一个后台作业完成后立即报告(而不是等待用户退出一个长编辑会
话)。如果省略了jobID,则假定是当前的后台作业。
onintr onintr label
onintr -
onintr
“正在中断”。用于在shell 脚本中处理中断信号(与Bourne shell 中
的trap 2 和trap ""2 命令相似)。第一种形式类似goto label,
此时如果捕捉到中断信号(例如,CTRL-C),则脚本分支至label;第
二种形式使脚本忽略中断。在一个其运行不能被干扰的脚本的开头或
代码段之前,第二种形式是有用的;第三种形式用于存储由先前的命
令onintr- 禁止的中断处理。

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:29:51 |显示全部楼层
示例
onintr cleanup 中断发生时转至“cleanup”
.
. shell 脚本命令
.
cleanup: 中断标号
onintr - 忽略相应的中断
rm -f $tmpfiles 删除任何创建的文件
exit 2 返回一个错误状态并退出
popd popd [+n]
删除目录栈的当前条目,或从栈中删除第n 条。当前条目有序号0 并
显示在左边。可参见dirs 和pushed。
pushd pushd name
pushd +n
pushd
第一种形式将工作目录修改为name,并且将其添加到目录栈中;第
二种形式将目录的第n 项移动到开始位置,使之成为工作目录(条目
序号从0 开始)。如果不带参数,pushd 会交换目录的前两项,并变
成新的当前目录。可以参见dirs 和popd。
示例
5% dirs
/home/bob /usr
6% pushd /etc 将/etc 添加到目录栈
/etc /home/bob /usr
7% pushd +2 将目录第三项转变成第一项
/usr /etc /home/bob
8% pushd 交换目录的前两项
/etc /usr /home/bob
9% popd 丢弃当前项,并移动到下一项
/usr /home/bob
rehash rehash
重新计算path变量的散列表。在当前会话期间无论何时创建一个新
命令,都应用rehash。这可以允许shell 定位并执行该命令。(如果
新命令没有列在path 目录中,在执行rehash 前,应将目录添加到
path中。)可以参见unhash 命令。
repeat repeat n command
执行command 的n 个实例。
示例
通过在一个文件中存储/usr/dict/words的25次拷贝来产生一个测
试文件。
% repeat 25 cat /usr/dict/words > test_file
从终端读10 行并存储在item_list 中:
% repeat 10 line > item_list
向report 中追加50 个样本文件:
% repeat 50 cat template >> report
set set variable=value
set variable[n]=value
set
将变量variable 设置为value;如果指定了多个值,则用值的列表来
设置变量。如果给定了下标n,则将变量中的第n个单词设置为value
(变量包含的单词的数量不能少于单词的序号)。如果没有给定参数,
则显示所有设置变量的名称和值。参见本章前面的“预定义的shell
变量”部分。
示例
% set list=(yes no maybe)  对一个词的列表赋值
% set list[3]=maybe        对存在的词列表的一项赋值
% set quote="Make my day"     对一个变量赋值
% set x=5 y=10 history=100    对几个变量赋值
% set blank 对blank 赋空值
setenv setenv [name [value]]
对一个环境变量name 赋值value。按惯例,name 应用大写。value 可
能是单个的词或一个引起来的字符串。如果没有给出value,则赋空
值。没有给出参数时,显示所有环境变量的名称和值。对USER、
TERM 和PATH 变量来说,setenv 不是必需的,因为它们会自动地
从user、term 和path中输出。可以参见前面的“环境变量”。
shift shift [variable]
假如给出variable,则转换一个词列表变量中的词。例如,name[2]
会变成name[1]。如果没有给出参数,则转换位置参数(命令行参
数),例如,$2 变成$1。在while 循环中经常用到shift。可参见
while 下的相应示例。
示例
while ($#argv) 当有参数时
if (-f $argv[1])
wc -l $argv[1]
else
echo "$argv[1] is not a regular file"
endif
shift 下一个参数
end
source source [-h] script
从C shell 脚本中读取并且执行命令。如果有-h,则命令会添加到历
史列表中,但不会执行。
示例
source ~/.cshrc
stop stop [jobIDs]
挂起当前的后台作业或由jobIDs 指定的后台作业,该命令是CTRL
-Z 或suspend 的补充。
suspend suspend
挂起当前的前台作业,和CTRL-Z 相似。经常用于终止su 命令。
switch switch
依靠一个变量的值来处理命令。当用户希望处理三个以上选择的时
候,switch 是if-then-else 语句的最佳替代。如果string 变量匹
配pattern1,则执行第一组命令;如果匹配pattern2,则执行第二组
命令;其他依次类推。如果没有模式匹配,则执行默认情况下的命令。
string 可以由命令替代、变量替代或文件名扩展来指定。模式可以用
模式匹配符号*、?和[ ]来指定。当执行完commands 之后,可使
用breaksw 来退出switch 语句。如果省略了breaksw(很少这样
做),则switch继续执行另一组命令,直到碰到breaksw或endsw。
下面是switch的一般语法,同时并列列出了一个示例,该示例用于
处理第一个命令行参数。
switch (string) | switch ($argv[1])
case pattern1: | case -[nN]:
commands | nroff $file | lp
breaksw | breaksw
case pattern2: | case -[Pp]:
commands | pr $file | lp
breaksw | breaksw
case pattern3: | case -[Mm]:
commands | more $file
breaksw | breaksw
. | case -[Ss]:
. | sort $file
. | breaksw
default: | default:
commands | echo "Error-no such option"
| exit 1
breaksw | breaksw
endsw | endsw

Rank: 3Rank: 3

主题
0
帖子
174
C币
956 枚
在线时间
32 小时
发表于 2010-3-12 15:30:35 |显示全部楼层
time time [command]
执行command 并且显示它花费了多少时间。如果没有给出参数,则
time 用于shell 脚本中,并对它进行计时。
umask umask [nnn]
显示文件创建掩码,或将文件创建掩码设为八进制nnn。文件创建掩
码决定关闭哪一个权限位。参见第二章该项的示例。
unalias unalias name
从别名列表中删除name。要想获得更多信息,可参见alias。
unhash unhash
删除内部的散列表。C shell 停止使用被散列的值,并且通过搜索
path 中的目录来定位一个命令。可参见rehash。
unlimit unlimit [resource]
消除对资源resource 的限制。如果没有给出resource,则取消对所有
资源的限制。要想获得更多的信息,可以参见limit。
unset unset variables
删除一个或多个变量。变量名可以用文件名元字符来指定为一个模
式。参见set。
unsetenv unsetenv variable
删除一个环境变量。文件名匹配无效。参见setenv。
wait wait
暂停执行,直到所有后台作业完成或接收到一个中断信号。
while while (expression)
commands
end
只要表达式为真(计算为非零),则执行w h i l e 和e n d 之间的
commands。break 和continue 可以中断或继续该循环。可以参见
shift 下的示例。
示例
set user = (alice bob carol ted)
while ($argv[1] != $user[1])
检查匹配以循环通过每一个用户
shift user
如果在循环通过时没有匹配...
if ($#user == 0) then
echo "$argv[1] is not on the list of users"
exit 1
endif
end
@ @ variable=expression
@ variable[n]=expression
@
将运算表达式expression 的值赋给variable;如果指定了下标n,则
对变量的第n 个元素赋值;如果既没有指定variable 也没有给出
expression,则输出所有shell 变量的值(和set 相同)。表达式运算
符和示例都在前面的“表达式”一节列出。下面两个特殊的形式也是
有效的:
@ variable++
变量加一。
@ variable--
变量减一。
您需要登录后才可以回帖 登录 | 加入社区!

C语言 ( 粤ICP备11042647号-2 )

GMT+8, 2012-2-7 22:16

©2009-2011 cyuyan.com.cn

回顶部