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! "