csh讲座

csh(读作C Shell),是UNIX上的 命令解释程序,执行 读入命令、解释、直到执行。

Shell 程序是 由 Shell 解释的 命令的集合。组合这种命令,可以作成持有多种功能的 新命令。C Shell的动作如下。

[b]△简单的 Shell 编程[/b]
#! /bin/csh
……
……

如果 在脚本 第一行写 #!/bin/csh -f ,则不读入~/.cshrc。如果不带 -f 选项,则在脚本里,~/.cshrc中定义的设定(alias等)变为有效。
if(条件) then
命令(任意的行数可)
else if (条件) then
命令(任意的行数可)
else
命令(任意的行数可)
endif



#! /bin/csh
if ($#argv != 1) then
echo "a file name should be specified as an argument"
exit
endif

if ((-r ${1}.tex) && (-f ${1}.tex)) then
jlatex $1
else
echo "file ${1}.tex is not a readable file"
exit
endif

rm ${1}.log ${1}.aux

if (!(-z ${1}.dvi)) then
xdvi $1
else
echo "file ${1}.dvi is empty"
endif

[b]并且,文件表达式 如下所示[/b]
-d:目录
-f:普通的 文件
-r:可读
-w:可写
-x:可执行
-e:文件的存在与否
-o:所有权
-z:文件大小是否为0
这些表达式 调查 文件的状态,真则值为1,假则值为0


foreach 变量名(参数1 参数2 …… 参数N)
命令1
命令2
·
·
命令N
end

例(在最后 如果没有换行,则不循环)

#! /bin/csh
foreach f (a.tex b.tex c.tex)
echo compiling a TeX file $f
jlatex $f
end <RET>



while(条件表达式)
命令1
命令2
·
·
命令N
end


例子(在最后 如果没有换行,则不循环)

set n=1
while ( $n <= 10 )
echo $n
@ n = $n + 1
end <RET>


C Shell的 运算符

history:h 除掉 路径名的 最后的 部分,取出其余路径名
history:t 仅仅取出路径名的 最后的 部分
history:r 除掉 扩展名
history:e 仅仅 取出 扩展名
history:s/l/r/ 把字符串 l 变换为 r
history:q 把字符串 括起来
history:x 把字符串 以空白、TAB作为分隔,然后括起来
history:g 对所有的句 修饰
history:a 对所有的字符 修饰
history:& 上回的 置换 再进行一次
history:p 不是执行命令,而是仅仅表示

不管哪个 history, 都可以包含 参数指定。
例:把多张图片 一次 转换为 bmp格式(于mogrify相同),变更为 从100开始的 文件名
$ ./img2bmp *.gif

例:img2bmp的 源代码(在最后,如果没有换行,则不循环)

#!/bin/csh

set l = 100
foreach a ($*)
convert $a $l:r.bmp
@ l ++
end <RET>


不使用C Shell,从文件名 除掉 路径和扩展名

$ basename /home/hoge/file1.txt.txt ← 在末尾 指定 待除掉的扩展名
file1


不使用C Shell,仅仅除掉 路径名的 最后的部分

$ dirname /home/hogei/file1.txt
/home/hogei/


[b]特别的 变量[/b]
$0 启动Shell时的 命令名
$< 从 标准输入(stdin)读入1行,返回其值
$$ 对该变量求值的 csh进程番号
$! 最后 在后台 执行的 进程的 进程番号

而且,C Shell 不能进行 实数的处理。请利用Perl等。

重定向(Redirect)(但是csh的场合下,取决于 noclobber 的 设定)
[table]
|操作|sh系|csh系(csh,tcsh等)|
|stdout的重定向|> file|> file|
|stdout的追加重定向|>> file|>> file|
|stderr的重定向|2> file|无法仅仅取出stderr|
|stderr的追加重定向|2>> file|无法仅仅取出stderr|
|stdout和stderr的重定向|> file 2>&1|>& file|
|stdout和stderr的追加重定向|>> file 2>&1|>>& file|
|通过管道把stdout和stderr向命令重定向|2>&1 | command| |& command|
|把stdout和stderr向各自的文件重定向|> file1 2> file2|例:(command > file1) >& file2|
[/table]

注意:上表中的 | , 实际上请使用半角的竖线 | 。这里只是为了排版方便。
假如是sh系

$ find / -name hoge 2>/dev/null


假如是csh系

$ find / -name hoge |& grep -v "find:"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值