Chinaunix首页 | 论坛 | 博客
  • 博客访问: 352719
  • 博文数量: 49
  • 博客积分: 817
  • 博客等级: 军士长
  • 技术积分: 496
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-16 19:05
文章分类

全部博文(49)

文章存档

2014年(6)

2013年(7)

2012年(8)

2011年(28)

分类: LINUX

2011-09-16 22:17:25

★ source 和 sh 的区别
 1) sh script.sh , script 会使用一个新的bash环境来执行脚本,也就是说script是运行在子程序里的;在子程序里生成的变量在父程序里是看不到的。当script执行完毕,子程序里的数据都会被移除。
 2) source script.sh  ,source则不同,是在当前bash环境中执行,也就是说,各项数据都会在当前环境中生效;这就是为什么要使用 source ~/.bashrc 使新修改的设置生效,而不能使用 bash ~/.bashrc的原因。

★ sed中的 pattern space 和 hold space
** pattern space 称为模式空间;
** hold space 称为保留空间或者缓冲区,初始为空;
1)模式空间用来储存与模式相匹配的那一行的内容,一旦sed 完成对模式空间中行的处理,其中的内容就会输出到屏幕,然后删除模式空间的内容,读取下一条与模式相匹配的行放入模式空间;
2)保留空间是sed用来临时存储一些数据,方便sed做更复杂的动作;常用的模式空间参数有:
a\, c\, i\, b, dD, gG, hH, nN, p, q, r, s/pattern/repalcement/, t, w, x, y/pattern1/pattern2/ 等。

★ expect、spawn和send命令
expect是用tcl作为核心,在Tcl基础上创建起来的,用来进行字符自动化编程,spawn是expect中的命令;有些系统不自带这些命令,需要手动安装TCL/Expect
spawn命令激活一个Unix程序来进行交互式的运行。
send命令向进程发送字符串;send中不带"\r"。
expect命令等待进程的某些字符串。
The send command send strings to a process.
The expect command waits for strings from a process.
The spawn command starts a process.
expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作。expect还能理解一些特殊情况,如超时和遇到文件尾。expect命令和Tcl的case命令的风格很相似。都是用一个字符串去匹配多个字符串。
spawn不支持重定向和管道,可以采取如下方法:spawn -open [open "|cat -u xxx" r]

例1:
#!/usr/bin/expect
set timeout 20
spawn passwd $user
expect "New Password:"
send "$passwd\r"
expect "Re-enter new Password:"
send "$passwd\r"
expect EOF

例2:添加iLO用户
#!/bin/bash
if [ $# -lt 1 ]
then
 echo "Usage : `basename $0` 10.41.43.32"  
 exit 1
fi
HOST=$1
UNAME=Administrator
PASSWD=PASSSW00RD
EXECCMD1='create /map1/accounts1 username=bestwiz password=linux_ccna name=bestwiz group=admin,config,oemhp_vm,oem
hp_rc,oemhp_power'

expect -c "
set timeout 20
spawn telnet $HOST
expect \"Login Name:\" ; send \"$UNAME\r\"
expect Password:\  ; send \"$PASSWD\r\"
expect \">\" ; send \"$EXECCMD1\r\"
expect \">\" ; send \"exit\r\"
"

★ 检索 tar, bz2, gz 压缩包内的文件
  1. zgrep -a -'ok|false|ng' 2012032*.tar.gz
zgrep 可以直接检索gz压缩包中的内容,默认是不能检索 tar 包中的内容的,可以加 -a 参数
-a  可以检索 tar 包中的内容
-e  使用pattern
不可以使用  -ae 这种格式,会使 e 参数失去作用 

  1. zcat filename.gz | grep abc
zcat 可以查看 gz 压缩包中的内容

  1. bzcat filename.bz2 | grep abc
bzcat 可以查看 bz2 压缩包中的内容


★ 查看linux发行版本和操作系统位数
lsb_release -a 查看当前linux发行版的信息;
getconf LONG_BIT 查看操作系统位数;
who /var/log/wtmp 与 last 的输出类似,last按时间倒序,这条命令按时间顺序;

★ 使用 nc 远程拷贝 
nc (netca) ,可以用来代替 scp,ssh 传输文件
1. 远程拷贝目录,从A机器复制到B机器(ip 10.20.33.120)上
A机器执行: 
  1. tar cf - ./documents | nc -l 5566
B机器执行:
  1. nc 10.20.33.120 5566 | tar xf -
其中5566为端口号

2. 远程拷贝文件, 从A机器复制到B机器(ip 10.20.33.120)上 
A机器执行: 
  1. nc -l 5566 < /home/hh/test.txt
B机器执行:
  1. nc 10.20.33.120 5566 > /tmp/test.txt
其中5566为端口号, B机器上接收文件名可以自己随意定义



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

上一篇:关于 eval 和 rename 命令

下一篇:sed小记

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