1211 正则表达式

1211上午

在命令行下:
ctrl +a 快速移动到首字母
ctrl +e 快速移动到行尾
ctrl +左右箭头,每次移动一个单词
ctrl + k 删除当前光标到尾部
ctrl +u 删除光标到 到行首

set -o vi 使用vi编辑器



ctrl +l 清屏=clear


文件名通配符

* 大于等于零任意字符
? 任意一个字符
[] 指定范围,只能从中选择一个
[abc]
[0-9] [a-z]

[ :alpha: ] 表所有字母
[:lower:] [:upper:],[:digit:],[:alnum:],[:punct:]标点符号,[:space:]

用法实例: a[[:alpha:]]b 相当于 a[a-Z]b


ls ~ 当前用户家目录

ls ~redhat redhat 家目录



{ }



shell,bsh(sh)没有命令补齐功能,历史查询功能也差,bourn发明的bsh

Bill Joy ,csh-->tcsh

Korn,ksh,GNU ksh

bourn again shell bash,GPL,

zsh


cat


cat -A -vET
cat -n 显示行号
cat -E

cat /etc/shells



shell,应用程序,提供用户作为系统接口
命令
编程功能


软件编程
编译类:源代码-->目标代码(编译器)
脚本类:源代码,(解释器,bash),perl 5.8 面向过程(难懂),python(面向对象),ruby(on rail),shell

变量:(容器)命名的内存空间


在脚本中,一般都是不分类型,都为char


bash:
本地变量
环境变量
位置参数变量
特殊变量,$?


声明变量:
name=123
set acer=zby
引用:三种"" ,'', ``
""弱引用

''强引用

``命令引用 ,$()


echo "name"

echo 'name':不会发生变量替换

ANIMAL=pig
echo $ANIMAL

echo ${ANIMAL}s

FILE=`ls /root`
echo $FILE

cp /etc/fstab /root/fstab-`date +"%H+%M+%S"`

环境变量:变量名称规则(字母开头,字母数字下划线)

关键字 export

export NAME(set NAME 区别)

#set显示所有变量
#export显示本地环境变量
#env 显示环境变量
#printenv 显示环境变量
NAME=Jerry
readonly NAME(设置为只读)
unset NAME


env 主要用法


HISTSIZE,HISTFILE,

PS1
PS2
PS3
PS4




man basn 找PS1 信息


()
export将变量变成环境变量

export PS1='\u-\t\!\$'

export LANG=en (指定字符集:可以解决用连接器没法显示的问题)


PATH

HOME
LANG

#locale





export PS1='[\u@\h\W]\$'

特殊变量

echo $? 显示上次命令状态
1-255 上次命令失败
0 成功


echo $$ 显示当前进程号

alias cdnet='cd /etc/sysconfig/network-scripts'

#alias 显示所有别名

unalias cdnet



touch \*.txt (反斜杠,原本显示)


写脚本文件
#!/bin/bash(指明解释器)


set -x (调试显示)


set +x (结束调试)


#bash -x a.sh(执行并调试)

#bash a.sh(a.sh没有执行权限下用)

位置参数:
./a.sh /etc /var /root
$0 $1 $2 $3


#basename /var/log


$((算术表达式))


+,-





bc计算器

scale=4(精度设置为4)

echo "1+1" | bc

echo "scale=4,3/4"|bc

/etc/profile ,/etc/profile.d

~/.bashrc
~/.bash_profile




1211下午



交互式:


profile <--环境变量的定义

/etc/profile--/etc/profile.d/*--~/.bash_profile--~/.bashrc--/etc/bashrc

非交互式:

bashrc<--

~/.bashrc--/etc/bashrc--/etc/profile.d/*



~/.bash_logout


#source .bashrc (. ./bashrc)重新读取文件



总线

BUS,PCI,ISA,EISA,AGP,USB




程序(代码,数据)

文件句柄,handle,文件描述符(0-9)
标准输入:keyboard, 0
标准输出:monitor,1

标准错误输出:monitor,2

I/O重定向:

> 输入
< 输出

>

2>标准错误输出重定向

<

&>标出输出和标准错误输出重定向


#set -C 拒绝信息覆盖( >|强行覆盖 )
#set +C 取消拒绝覆盖


>>追加
2>>追加标准错误输出重定向
<< here document


cat >>/tmp/my.txt <<EOF (以EOF结尾)

#ls /etc/ > /tmp/ls.correct 2> /tmp/ls.error


2>&1 与 &> 一样



管道(使用到了 子shell)

tr 'a-z' 'A-Z' (替换命令)

echo 'abcd'| tr 'a-z' 'A-Z'



tee

echo 'abcd'| tee /tmp/tee.out | tr 'a-z' 'A-Z'


ls -R 表递归


exec 3> /tmp/custom.out 定义文件标识符

ls /etc >&3 (就是把结果写入/tmp/custom.out)

exec 3>&- 关闭文件标识符(用完之后一定要关闭,不然就一直打开状态,占资源)





less cat
head tail
more


cat :
-A
-n
-s(压缩空白行)




less比more多了搜索功能

/ 顺序搜索
? 倒叙搜索

less -M 显示行号总行号和百分比


ls -l /etc |less




head -n 文件

tail -n 文件

tail -f 文件(查看后不退出,ctrl + c 退出)


grep,全面搜索正则表达式并打印之


grep 基本正则表达式
grep -E 支持扩展正则表达式
egrep 与 grep -E 相同
fgrep 不支持正则表达式

pattern,模式,从文中


grep --color=auto 'root' /etc/passwd 高亮显示结果



正则表达式:


. :任意单个字符
* :表示匹配它前面一个字母任意次(注意与globbing文件名通配不一样!!!!!!!)


r*t :rt,t,rrt,rrrt

.* :匹配任意字符
r.*t :


r.\{n\} 次数 精确匹配 r.\{2\} 出现两次

r.\{m,n\} 次数范围匹配 r.\{0,2\} 出现零到二次


r.\{n,\} 次数至少匹配 r.\{2,\} 至少出现两次


[a-z] [A-Z]


[^a-z] 取反


锚定符:


^root$


锚定单词:
\< 词首定位符

\> 词尾定位符

\<root\>

\broot\b 与 \<root\>一样

\Broot\B 不匹配





\(..\) 字符串次数匹配 love your lover \(love\).*\1r



root.*root

\(root\).*\1 \1表示引用第一个括号内容

\(like\).*\1.*\(love\).*\2



^[[:alpha:]]*[^.][0-9]*

\<[0-9]\{1,\}.[0-9]\{2\}\>

自己写的错误的ip:
{

grep -E '[0-9]\{1,2\}|1[0-9]\{2,2\}|2[0-5]\{2,2\}.[0-9]\{1,2\}|1[0-9]\{2,2\}|2[0-5]\{2,2\}.[0-9]\{1,2\}|1[0-9]\{2,2\}|2[0-5]\{2,2\}.[0-9]\{1,2\}|1[0-9]\{2,2\}|2[0-5]\{2,2\}'




grep -E "[1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4]\).[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4].\2.\1


}

egrep 不支持 \(...\)

egrep 'r.{2}t'

egrep ( ) 括号表字符组
lover lovover
egrep l(ov){2}er
grep: * 0<=
? 0,1
+ 1<=
| 或者 like your lover,love your lover l(ik)|(ov)e your lover



grep -V: 显示匹配不到的内容
grep -E
grep -f
grep -i :忽略大小写

grep -n :在匹配的结果中的前n行

gerp -An:
grep -Bn:
grep -Cn: connect

export GREP_COLOR='01;32' 3表示前景色,2表绿色

cut:


cut -d: -f1 /etc/passwd 每行的以:分割的第一段
cut -d' '-f2 每行以空格分割的第二行
cut -c 2-3
who 当前登录的所有用户

wc 统计

-l 统计行
-w 统计单词
-c 字节(字符)

ls -l /etc |grep -v "total"|wc -l

who |grep "^root"| wc -l

作业:编写脚本,给出用户名变量,判断用户是否存在,显示某用户登录了几次,登录的时间,



shell脚本:
条件测试:

test expression 或者 [ expression ] 或者[[ expression ]]
test 1 -gt 2
o真,非0假

great less
gt lt


test
-f 文件
-d 目录
-e 存在


综合测试
-a 与
-o 或


短路操作符
&&
||
&& 连接的是完整的命令


比较下面结果
#[ 1 -gt 2 ] && echo "OK"

#[ 3 -gt 2 ] && echo "OK"



#[ 1 -gt 2 ] || echo "OK"


#[ 4 -gt 2 ] || echo "OK"


echo $? 显示上次命令的状态是否成功

grep "^root" /etc/passwd && (who |grep "^root"|wc -l)

grep "^root" /etc/passwd &>/dev/null && (who |grep "^root"|wc -l)

grep "^root" /etc/passwd &>/dev/null ||echo "pelase give me a correct name, try again\!"


#!/bin/bash
if [ grep "^$1\>" /etc/passwd &>/dev/null]
then
{
who|grep "^$1\>"|wc -l;
who|grep "^$1\>"|cut -d' '-f14;
}
else
echo "pelase give me a correct name, try again! "
fi






#!/bin/bash
grep "^$1" /etc/passwd &>/dev/null && echo $1 && (who |grep "^$1"|wc -l ) && (who |cut -d" " -f12 )

grep "^$1" /etc/passwd &>/dev/null || echo "please input a right username,try again! "

你可能感兴趣的:(正则表达式,职场,休闲)