shell 是一种命令行程序, linux 用户可以通过 shell 与操作系统内核进行交互。
shell 分为好几种:sh,bash,csh,tcsh, 其中 tcsh 是 csh 的增强版,常用的两种 shell 就是 bash 和 tcsh。
一般linux 默认shell 是 bash,但是IC公司用的较多的是 tcsh,二者的语法和内建命令相差较大,关于bash,网上资料非常多,这里主要记录 tcsh 的语法和基本命令。
具体使用哪个shell 可以在脚本第一行定义: #! /bin/bash 或者 #! /bin/tcsh
查看当前默认shell 可以看环境变量 echo $SHELL
tcsh 基本语法:
1. 创建字符串变量: set var = hello; set var01 = “hello world” ;echo $var # 注意等于号
创建数值变量: @ num = 101 ; @ n01 = $num * 2 ; echo $n01 # 注意用 @ 开头,且@与变量之间需留空格
2. 控制流(if while foreach )
(a). if (condition) then # 注意 if 和 then 必须写在同一行,if 条件用小括号
cmd01
cmd02 # 可以写很多行命令
else
cmd03
endif # 一定要有这个 endif 结束
(b). while ( condition )
cmd01
end
(c). foreach var ( var-list )
cmd01
end
3. 测试表达式
if ( -e file01 ) then # 检测文件 file01 是否存在
cmd01
end
常用检测命令:
-e file01 检测文件 file01 是否存在,存在则返回 1, 否则返回 0
-f file01 检测文件 file01 是否是普通文件
-d file01 检测文件 file01 是否是目录
-w file01 检测文件 file01 是否可写
4. 命令置换
如果要将一个shell命令的执行结果作为另一个命令的输出,可以用 `cmd`,注意这里的 ` 不是单引号,而是键盘 ESC 下方那个键,比如:
echo stage_`date` #(而在 tcl 语言中,引用shell命令的格式是 echo stage_[sh date] )
echo " the stage finish at `date` " # 双引号中的大部分特殊字符都会失去其特殊意义,但是有三种字符除外:变量置换符、命令置换符、转义字符,即 " $ ` "
单引号中所有特殊字符都会变成普通字符,适合用在 alias 中
5. 连续执行
如果需要在一行命令中连续执行多条shell命令,有以下几种写法:
1) cmd1 ; cmd2 ; cmd3 # 按顺序执行三个 cmd,不管是否成功执行
2) cmd1 && cmd2 && cmd3 # 顺序执行三个 cmd,只有前边的 cmd 执行成功,才会继续执行
3) cmd1 || cmd2 || cmd3 # 如果 cmd1 执行成功,就不执行之后的 cmd。
6. 其他命令
setenv var value # 设置环境变量 var ,全局可用,注意这里没有等于号
printenv env_name # 显示环境变量,如果没参数,就显示所有环境变量
umask 022 # 设置新建文件默认属性, 022 是八进制,且表示取消掉权限,所以等价于 chmod 755
7. 几个 tcsh 实例
1). 每隔半小时检测一次 flag 文件是否存在,不存在就继续等待,若存在就执行make run
文件名 auto_run.sh :
to be continue ...
|--------------------------------------|