★ 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 压缩包内的文件
-
zgrep -a -e 'ok|false|ng' 2012032*.tar.gz
zgrep 可以直接检索gz压缩包中的内容,默认是不能检索 tar 包中的内容的,可以加 -a 参数
-a 可以检索 tar 包中的内容
-e 使用pattern
不可以使用 -ae 这种格式,会使 e 参数失去作用
-
zcat filename.gz | grep abc
zcat 可以查看 gz 压缩包中的内容
-
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机器执行:
-
tar cf - ./documents | nc -l 5566
B机器执行:
-
nc 10.20.33.120 5566 | tar xf -
其中5566为端口号
2. 远程拷贝文件,
从A机器复制到B机器(ip 10.20.33.120)上
A机器执行:
-
nc -l 5566 < /home/hh/test.txt
B机器执行:
-
nc 10.20.33.120 5566 > /tmp/test.txt
其中5566为端口号, B机器上接收文件名可以自己随意定义
阅读(849) | 评论(0) | 转发(0) |