tcsh编程学习3
来源:互联网 发布:http post数据 编辑:程序博客网 时间:2024/04/27 07:58
一:shell是什么
shell是一个UNIX程序,当给出一条命令时,shell解释并执行它,然后返回一个提示或是一个错误消息。
作为一个命令解释器,shell是一种编程语言,它有自己特定的语法,用户能写一种称之为批程序的特定程序,并用shell来解释执行它。
二:shell的种类
主要有三种:
Bourne Shell
程序名是sh,是最老但是使用最广泛的shell。要开始Bourne shell,只要键入sh,就可切换到该bsh模式中。
Korn Shell
Bourne家族中的另一个shell是Korn Shell。向上兼容Bourne Shell,其执行程序的名字是ksh
C Shell
是加州大学伯克利分校的Bill Joy开发的,它是为替换Bourne Shell而设计的,其执行程序名为csh。C Shell基于C成语语言,深受大学程序员,教授,实验室研究员的喜爱。
三:程序脚本
脚本不是复杂的程序,它是按行解释的。脚本第一句总是以#!/bin/sh开始。这段脚本通知shell使用系统上的Bourne shell解释器。
任何脚本都可能有注释,加注释需要此行的第一个字符为#,解释器对此行为不予解释。在第二行注释中写入脚本名是一个好习惯。
环境
tcsh程序启动的时候,将首先执行一个系统级的启动文件/etc/csh.cshrc,然后是用户主目录下的两个shell初始化文件:.tcshrc和.login.这些文件让用户来设置它们自己的工作环境。
.tcshrc(.cshrc): 包含tcsh变量设置,每次启动一个tcsh子shell都将执行它。别名和历史通常也在这里设置。
.login:login文件通常在第一次登陆是执行一次。通常它包括环境变量和终端设置。窗口应用程序通常从该文件启动。
变量
一,变量类别
1,局部变量:局部变量只能在创建他们的shell中被识别。如果在.tcshrc文件中设置某个局部变量,每启动一个新的tcshell,该变量都会被重置。按照惯例,局部变量应该以小写字符命名。
2,环境变量:又成为全局变量。环境变量在创建他们的shell中定义,被该shell派生出的所有shell继承。但在子shell中定义的环境变量不会回传给父shell.
二,声明变量
和别的shell一样,tcsh也有自己的内置变量。在tcsh中一共支持三种说明变量的方式:
set:说明局部变量,既能分配数字值又能赋予字符串。
使用方法:
set temp = “hello”
unset temp
set (查看所有的局部变量)
@:说明局部变量,只能给说明的变量赋数字值。
使用方法:
@ temp = 5
@ temp =“hi” // 报错”@:expression syntax”
@ temp = ( 3 + 5 ) //用@说明变量允许用算术表达式,set语句不行
unset temp
@ (查看所有的局部变量,结果和set显示的一致)
setenv:设置环境变量,允许该变量可以被它所有的子进程继承或输出给所有的子进程。
使用方法:
setenv GOOD 120
unsetenv
setenv (查看所有的环境变量)
三,查看变量
echo命令
用法:
set temp = 100
echo temp //显示结果“temp”
echo $temp //显示结果“100”
四,给变量取别名
alias命令
优点(1,方便记忆 2,便于快速执行某个目录下的可执行文件。在命令行中设置的alias不会被子shell继承)
使用方法:
alias (查看现在所有的别名)
alias 别名 命令或是路径
alias m more
alias emas cd /vobs/cello/emas/
unalias 命令:删除别名
unalias m(删除m这个别名)
TCSH编程(2)
条件测试
test命令
1,测试文件状态
表达方式:
test condition
返回值:0为成功,其他为失败。
文件测试状态
-d 目录
-L 符号连接
-s 文件长度大于0,非空
-u 文件有suid位设置
-f 正规文件
-r 可读
-w 可写
-x 可执行
1,逻辑操作符
-a 逻辑与,操作数两端均为真,结果为真,否则为假。
-o 逻辑或,操作数两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。
3,字符串测试
格式:test “string” string_operator “string” (其中string_operator为操作符)
= 两个字符串相等
!= 两个字符串不等
-z 空串
-n 非空串
4,测试数值
格式:test “number” number_operator “number”(其中number_operator为操作符)
-eq 数值相等
-ne 数值不相等
-gt 第一个数大于第二个数
-lt 第一个数小于第二个数
-le 第一个数小于等于第二个数
-ge 第一个数大于等于第二个数
expr 命令
e x p r命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
e x p r也是一个手工命令行计数器。
例如:expr 100 + 100
200
expr 3 /* 3
9
expr 3 / 3
1
注意:使用乘号时,必须用反斜线屏蔽其特定含义。因为s h e l l可能会误解显示星号的意义。
e x p r命令用于记数:
number = 1
number = `expr $number + 1` (反引号即替代命令,expr $number + 1是命令,不能放在等号右边。如果直接number = expr $number + 1 ,则会报错“set: varibale name must begin with a letter” )
命令执行顺序
在执行某个命令的时候,有时候需要依赖前一个命令是否执行成功。Tcsh中的命令执行顺序控制符
&&
格式:commands && commands
含义:当左边的命令返回真后(执行成功),右边的命令才能执行
例子:
>mv /apps/bin /apps/dev/bin && rm –r /apps/bin
||
格式:commands || commands
含义:当左边的命令没有执行成功则执行右边的命令。
例子:cp 1.txt ob.txt || echo “the cp failed”
()
格式(commands1;commands2;commands3;…..)
含义:在当前的shell中将括号中的命令一起合并执行。
Shell引用类型
一:引用的必要性:
我们在使用文字字符串的时候,经常会因为少用或是漏用引用而造成一些麻烦。比如说:
echo Hit the star button to exit *
则在屏幕上显示的将是Hit the star button to exit 当前目录下的所有目录。因为没有用””所以,shell编译器把*解释为当前所有目录。
二:Shell的引用类型
双引号
“”
反单引号
``
单引号
‘’
反斜杠
/
双引号:
使用双引号可引用除字符 $ ` / 外的任意字符和字符串,必须成对出现。主要是用它来将字符串赋值给变量,实际上和直接赋值变量没有差异。
>Set temp = “date”
>Echo $temp
>date
反单引号:
把UNIX命令放在反引号(` `)中,就能把它的输出结果赋值给变量或是字符串,一一操作被称为命令替换。如果命令的输出赋给一个变量,则将会被保存成一个数组或是词表。
单引号:
可以保护除了!之外的所有元字符不被解释,并且可以保护双引号,必须在同一行内配成对。
>set temp = boy
>echo ‘$temp’
>$temp
>echo “$temp”
>boy
反斜杠:
如果下一个字符有特殊含义,反斜杠防止shell误解其含义,即屏蔽其特殊含义。(含有特殊含义的字符包括 & * + ^ $ ` “ | ? )
例如:为了屏蔽*的特殊含义,而是想仅仅输出一个*号的话,则语句写成
>echo /*.则编译器就会忽略*的特殊意义,而仅仅把它当成一个一般的字符输出
控制流结构
1, 退出状态
任何命令进行时都将返回一个推出状态,如果要观察其退出状态,可使用命令echo $?来查看。
要推出当前进程,tcsh 提供命令exit ,一般的格式为exit n (n 为一数字)
n为0,退出成功,无错误。
n为1,退出失败,某处有错误
推荐加入脚本本身的退出脚本值是一种良好的编程习惯。
2,if-then-else 语句
格式:if( expr )then //如果此处then另起一行,则会报错”if:empty if.”
commands
else
commands
endif // 此处endif 可以省略
例子:
1,简单的if-then-else语句。
3,测试文件拷贝是否成功。
小问题:在输出时,系统提示的出错信息和自己设置的提示都显示出来,如何屏蔽掉系统的出错提示呢?―――――错误重定向。
3 , switch 语句
格式:switch( expression )
case comparasion 1:
commands
breaksw
case comparasion 2:
commands
breaksw
default:
endsw
例子:
1,”set va = $<”意思为从键盘读入一个数值作为变量va 的值。
1,如果每个case后面不加breaksw的话,则程序继续执行case 之后的语句
4 , for循环语句
格式:foreach variable( wordlist )
commands
……
end
含义解释:这个语句表示变量将取得wordlist 中每个可能的值。执行的循环命令是在语句foreach 和end 之间的。
例子:
1,给某个目录下的所有文件改名。
在tcsh下,*代表改目录下的所有文件。
2,计算某个目录下的文件数目。
注意点:在tcsh下,关于变量的赋值问题。如果写成:
set temp = 1
temp = 2
则会报错“temp : command not found”解决方式是第二句写成set temp = 2.实际的操作实现是将原来的temp变量覆盖,并没有重新分配空间。
更简便的实现方法:
set temp =*
echo $#temp
5,while语句
格式:while ( expr )
commands
……
end
6,循环控制语句
1,break:用于退出最接近的foreach/while循环过程,可以制定跳出的层数。如果在两层循环内,则用break 2正好跳出。
2,continue:此命令继续执行最靠近的的while/foreach语句。当前其他的命令被执行。
例子:
数组
形式:括号中用空格或制表符分隔的一列词,数组元素的下标从1开始(和传统中的数组定义有所不同)。
例子:
重定向
一:标准输入,输出和错误
当我们在shell中执行命令得时候,每个进程都和三个打开的文件相联系,并使用文件描述符来应用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
文件
文件描述符
缺省的设备
输入文件-标准输入
0
键盘或是文件
输出文件-标准输出
1
屏幕或是文件
错误输出文件-标准错误
2
屏幕或是文件
二:文件重定向
在执行命令时,可以指定命令的标准输入,输出和错误,要实现这一点就需要使用文件重定向,下表完整的列出了最常用的重定向组合。
规则:
几种常用用法:
1,ls -a >> record.txt
(输出重定向,将当前目录下的文件显示内容附加到record.txt中)
2,( cat 1.txt 2.txt > account.out) >& account.error
(将1.txt 和2.txt文件的合并内容输入到account.out中,如果发生错误则输入到account.error中)
3,grep "good" 1.txt >& account.out
(在1.txt中搜索含有good的字符串,并将输出结果和可能发生的错误都输入到account.out中)
- tcsh编程学习3
- tcsh编程学习1
- tcsh编程学习2
- TCSH shell 编程入门
- TCSH shell 编程入门
- TCSH shell编程入门
- csh(tcsh)编程一
- shell tcsh
- csh(tcsh)
- fedora10上安装TCSH
- tcsh, bash shell
- csh和tcsh
- bash与tcsh简单比较
- 配置你的 csh/tcsh
- 设置环境变量 ---- bash和tcsh
- 配置你的 csh/tcsh
- 学习编程3
- 多线程编程学习3
- Symbian自启动(AutoStart)
- tcsh编程学习2
- 汇编语言求数组的长度_$的用法
- Symbian截屏以及前后台切换(Screen capture)
- 倾城之恋
- tcsh编程学习3
- Symbian主题处理
- 开始CUDA的研究
- 【代码示例】判断字符串是否可转换为数字并格式化0.00为0
- c# 疑难(一)之打开“OpenFileDialog”文本对话框后默认路径改变问题和解决方法
- Symbian 自定义桌面图像的响应
- 国外电子工程师们和国内电子工程师
- NAT-PT 协议转换网关的设计与实现
- 一些流行且免费的Maven仓库工具