shell编程

在shell编程中,”EOF“通常与”<<“结合使用,“<<EOF“表示后续的输入作为子命令或子shell的输入,直到遇到”EOF“,再次返回到主调shell,可将其理解为分界符(delimiter)。既然是分界符,那么形式自然不是固定的,这里可以将”EOF“可以进行自定义,但是前后的”EOF“必须成对出现且不能和shell命令冲突。其使用形式如下:

交互式程序(命令)<<EOF
command1
command2
...
EOF


”EOF“中间的内容将以标准输入的形式输入到”交互式程序“,当shell看到”<<“知道其后面输入的分界符,当shell再次看到分界符时,两个分界符中间的部分将作为标准输入。
“EOF”一般常和cat命令连用。
注意,最后的”EOF“必须单独占一行。

下面以cat命令为例讲解”EOF“使用。一般有以下两种形式
1.cat<<EOF 2.cat<<EOF>filename或者cat<<EOF>>filename(cat<<EOF>filename或者cat<<EOF>>filename )
其实,第一种形式和第二种形式没有什么本质的区别,第一种形式将内容直接输出到标准输出(屏幕),而第二种形式将标准输出进行重定向,将本应输出到屏幕的内容重定向到文件而已。

例1:

#cat<<EOF
>12
>34D
>EOF
12
34D

例2:

#cat>>filename<<EOF
>DHA
>23
>EOF
#cat filename
DHA
23

$# 表示提供到shell脚本或者函数的参数总数。
$0 表示第一个参数。

整数比较
-eq     等于,如:if ["$a" -eq "$b" ]
-ne     不等于,如:if ["$a" -ne "$b" ]
-gt     大于,如:if ["$a" -gt "$b" ]
-ge    大于等于,如:if ["$a" -ge "$b" ]
-lt      小于,如:if ["$a" -lt "$b" ]
-le      小于等于,如:if ["$a" -le "$b" ]
<  小于(需要双括号),如:(("$a" < "$b"))
<=  小于等于(需要双括号),如:(("$a" <= "$b"))
>  大于(需要双括号),如:(("$a" > "$b"))
>=  大于等于(需要双括号),如:(("$a" >= "$b"))




awk

在命令中调用a w k时,a w k脚本由各种操作和模式组成。
如果设置了 - F选项,则 a w k每次读一条记录或一行,并使用指定的分隔符分隔指定域,但
如果未设置- F选项,a w k假定空格为域分隔符,并保持这个设置直到发现一新行。当新行出现
时,a w k命令获悉已读完整条记录,然后在下一个记录启动读命令,这个读进程将持续到文件
尾或文件不再存在。

在碰到 a w k错误时,可相应查找:
• 确保整个a w k命令用单引号括起来。
• 确保命令内所有引号成对出现。
• 确保用花括号括起动作语句,用圆括号括起条件语句。
• 可能忘记使用花括号,也许你认为没有必要,但 a w k不这样认为,将按之解释语法。
如果查询文件不存在,将得到下述错误信息:

s e d脚本文件 [选项] 输入文件
不管是使用 s h e l l命令行方式或脚本文件方式,如果没有指定输入文件, s e d从标准输入中
接受输入,一般是键盘或重定向结果。
s e d选项如下:
n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 s e d命令,
此选项无用,但指定它也没有关系。
f 如果正在调用 s e d脚本文件,使用此选项。此选项通知 s e d一个脚本文件支持所有的 s e d
命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e d即为支持s e d命令的文件。

<EOT> 就是CTRL+D

如果使用 { }来代替(),那么相应的命令将在子 s h e l l而不是当前 s h e l l中作为一个整体被执
行,只有在 { }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子 s h e l l中执
行,否则在当前 s h e l l执行。

正则

注意^符号的使用,当直接用在第一个括号里,意指否定或不匹配括号里内容
[ ^a-z A-Z] 匹配任一非字母型字符
[ ^ 0 - 9 ] 匹配任一非数字型字符

如果要抽出记录,使其行首不是 4 8,可以在方括号中使用 ^记号,表明查询在行首开始

[root@CentOS3 devops]# grep '^[^48]' data.f
219 dec 2CC1999 CAD 23.00 PLV2C 68
216 sept 3ZL1998 USP 86.00 KVM9E 234

awk 有许多内置变量用来设置环境信息
A R G C 命令行参数个数
A R G V 命令行参数排列
E N V I R O N 支持队列中系统环境变量的使用
FILENAME a w k浏览的文件名
F N R 浏览文件的记录数
F S 设置输入域分隔符,等价于命令行 - F选项
NF 浏览记录的域个数
N R 已读的记录数
O F S 输出域分隔符
O R S 输出记录分隔符
R S 控制记录分隔符

s e d选项如下:
n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
用来打印编辑行。
c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条 s e d命令,
此选项无用,但指定它也没有关系。
f 如果正在调用 s e d脚本文件,使用此选项。此选项通知 s e d一个脚本文件支持所有的 s e d
命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e d即为支持s e d命令的文件。