Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189816
  • 博文数量: 76
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 831
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-31 00:52
文章分类

全部博文(76)

文章存档

2010年(58)

2009年(18)

我的朋友

分类:

2009-11-17 17:10:09


Learn Shell




cat << EOF
This will create the here document. Need to research.
EOF


算术运算
expr    执行简单的整数算术运算
awk、bc    执行浮点算术运算


方括号代表test命令,test测试命令的结果之后,返回状态为0表示成功,返回状态为非0表示失败。注意, test命令不允许展开通配符。

while对紧跟在后面的命令进行求值,若该命令的退出状态为0,则执行循环体内的命令,循环一直到while后面的那条命令的退出状态为非0为止。

case的值里可以用shell通配字符,还可以用坚杠对两个值取或





元字符
*     匹配零个或多个字符
?     匹配单一字符
[abc]    匹配a、b、c中这组字符中的一个
[a-z]    匹配在a至z这个范围内的某个字符
[!abc]    匹配不在a、b、c中这组字符中的一个






反斜杆\可用于转义单个字符,使其免受解释。如果在双括号里,它将保护美元符号$,反引号``和反斜杠不被解释。
    echo "Where are you going ?"
    echo "\$5.00"

单引号''可以用于保护其中的所有元字符不被解释。
    echo 'Don\'t you need $5.00?'

反单引号``可以用来执行命令替换。
    echo "Usage: `basename $0`, arg1, arg2"


$$    显示当前shell的PID。
$0    当前shell脚本的名称
$*    显示所有位置参数,与$@相同
"$*"    扩展为单个变量
"$@"    扩展为多个单独的变量
$#    显示位置参数的个数
$?    shell执行上一条命令的退出状态值,为0则成功。
$!    最近一个进入后台的作业的PID
        sleep 25&
        echo $!


IO重定向
2>文件名        重定向标准错误输出到文件
&>文件名        重定向标准输出和标准错误到文件
>&文件名        重定向标准输出和标准错误到文件(首选方式)
2>&1        将标准错误输出重定向到输出的去处
1>&2        将输出重定向到标准错误输出的去处




常见shell内置环境变量
LOGNAME




常见shell命令
date +%T    显示当前时间       
read    可用于从终端或文件中读取输入
set    将重置位置参数
exit    终止脚本并退回命令行,后面可接0~255的整数参数
ps -ef    显示正在系统上运行的所有进程




常用shell脚本片段
特殊变量修饰符:?将检查$n是否有值,如果$n无值,则打印指定信息并退出
name=${n:?"require an argument."}
echo Hello $name



grep
-----------------------------------------------------------------------------------------------------------------------------
grep option RE filename
发现了要查找的模式,退出状态为0
找不到要查找的模式,退出状态为1
找不到指定的文件时,退出状态为2

选项
-i   
    忽略大小写
-r   
    递归查找文件,包括文件的内容
-n   
    加上行号
-v   
    反向查找,列出不匹配的行
-c   
    显示匹配到的行的数目,不显示行的内容
-A -B -C
    显示行数控制


元字符
^   
    行首定位符
    grep '^love' filename    匹配所有love开头的行
$   
    行尾定位符
    grep 'love$' filename    匹配所有以love结尾的行
.   
    匹配一个字符
    grep 'l..e' filename    匹配包含一个l,后跟两个字符,再跟一个e的行
*   
    匹配零或多个前导字符
    grep 'love1*' filename    匹配包含0或多个1的模式love的行
[]   
    匹配一组字符中的任一个
    grep '[Ll]ove' filename    匹配包含love或Love模式的行
[^]   
    匹配不在指定字符内的字符
    grep '[^a-z]ove' filename
\<   
    词首定位符
\>   
    词尾定位符
    grep '\<[a-z].*n\>' filename
x\{m\}   
    字符x的重复出现次数为m次
x\{m,\}   
    字符x的重复出现次数至少为m次
x\{m,n\}
    字符x的重复出现次数为至少m次,但不超过n次
    grep v\{1,2\} filename
\(..\)   
    标志匹配到的字符,最多可以设置9个标签,从\1开始
    grep '\(v\)[a-z]\1' filename    可以匹配出lovev,\1被标志为v





sed
-----------------------------------------------------------------------------------------------------------------------------
sed option 'command' filename
不管模式找到与否,退出状态均为0
只有当出现语法错误时,退出状态才为非0

option
-n   
    取消默认输出
    sed -n '/an/p' file
-f   
    指定脚本文件名

command
d   
    删除行
    sed '/love/d' file     删除含有love的行
    sed '1,3/d' file    删除文件中的第1~3行
    sed '$d' file        删除最后一行
    sed '3,$d' file        删除第3到最后一行的
p   
    打印行
    sed -n '/an/p' file
s   
    用一个字符串代替另一个, 注意,紧跟s命令的字符将成为新的串分隔符
    sed -n 's/love/you/p' file    只替换行内第一个love,第二个love不替换
    sed -n 's/love/you/gp' file     行内全局替换
    sed -n 's#love#you#gp' file     行内全局替换
!   
    对所选行以外的所有行应用命令
    sed '/love/!d' file 或 sed '/love/\!d' 删除所有不含love的行



元字符
^   
    行首定位符
$   
    行尾定位符
.   
    匹配一个字符
*   
    匹配零或多个前导字符
[]   
    匹配一组字符中的任一个
[^]   
    匹配不在指定字符内的字符
\<   
    词首定位符
\>   
    词尾定位符
x\{m\}   
    字符x的重复出现次数为m次
x\{m,\}   
    字符x的重复出现次数至少为m次
x\{m,n\}
    字符x的重复出现次数为至少m次,但不超过n次
\(..\)   
    标志匹配到的字符,最多可以设置9个标签,从\1开始
&   
    保存查找串以便在替换串中引用
    sed  's/love/**&**/' file    将love变成**love**




sed可以用将分隔符/改成另一个字符,只需要在字符前加一个\即可,如下所示的两个命令效果是一样的,在第二条中用c来取代/
    sed '/love/d' file
    sed '\clovecd' file






exec
-----------------------------------------------------------------------------------------------------------------------------
exec命令能在不启动新进程的前提下,将当前正在运行的程序替换为另一个新的程序。

jili@jili-desktop:~$ exec > temp    //将文件temp作为当前shell的标准输出
jili@jili-desktop:~$ pwd
jili@jili-desktop:~$ date
jili@jili-desktop:~$ exec > /dev/tty     //重新指向终端
jili@jili-desktop:~$ date
Tue Jan 19 15:00:53 CST 2010
jili@jili-desktop:~$ cat temp
/home/jili
Tue Jan 19 15:00:37 CST 2010
jili@jili-desktop:~$













cat /etc/redhat-release




阅读(758) | 评论(0) | 转发(0) |
0

上一篇:scheduler

下一篇:Tree

给主人留下些什么吧!~~