一、正则表达式
1.1正则表达式与通配符
1.1.1概念
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式。
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能用shell自己的通配符来进行匹配。
1.1.2基础正则表达式
二、字符截取命令
2.1 cut命令
cut [选项] 文件名 cut -d ":" -f 1,3 /etc/passwd
选项:
-f 列号 提取第几列
-d 分隔符 按照指定分隔符分隔列
2.2 printf
printf '输出类型输出格式' 输出内容
输出类型:
%ns 输出字符串。n是数字指代输出几个字符
%ni 输出整数。n是数字指代输出几个整数
%n.nf 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位史整数。
输出格式
\a: 输出警告声音
\b: 输出退格键,也就是Backspace键
\f: 清楚屏幕
\n: 换行
\r: 回车,也就是Enter键
\t: 水平输出退格键,也就是Tab键
\v: 垂直输出退格键,也就是Tab键
2.3 awk
awk '条件1{动作1}条件2{动作2}条件3{动作3}....' 文件名
条件:
一般使用关系表达式作为条件
x > 10
x < =10
动作(action):
格式化输出
流程控制语句
df -h | grep "sda1" | awk '{print$5}' | cut -d "%" -f 1
2.3.2 BGEIN 首先输出BEGIN里面的内容
df -h | awk 'BEGIN{print "test!!"}{print $2"\t" $5}'
2.3.2 FS指定分隔符
awk {'FS=":"} {print$1"\t" $3}' /etc/passwd 第一行数据默认不处理
awk 'BEGIN{FS=":"} {print$1"\t" $3}' /etc/passwd
2.3.3 END
awk 'BEGIN{FS=":"} END{print"test....."} {print $1"\t" $3}' /etc/passwd
2.3.4关系运算符
awk 'BEGIN{FS=":"} END{print"test....."} $3>=500 {print $1"\t" $3}' /etc/passwd
2.4 sed
sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
sed [选项] ‘[动作]’ 文件名
选项:
-n 一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处 理的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作
a\: 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾要用“\” 代表数据未完结
c\: 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾要用 “\”代表数据未完结
i\: 插入,在当前行前插入一行或多行。插入多行时,除最后一行外,每行末尾要用 “\”代表数据未完结
d: 删除,删除指定的行
p: 打印,输出指定的行
s: 字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g (和vim中的替换格式类似)
sed -n '3p' iptables.rules 输出iptables.rules文件里面的第三行数据
sed '2i canglaoshi bolaoshi' student.txt 在student.txt的第二行前加入“canglaoshi bolaoshi”
三.字符处理命令
3.1排序命令
sort [选项] 文件名
选项:
-f: 忽略大小写
-n: 以数值型进行排序,默认使用字符串型进行排序
-r: 反向排序
-t: 指定分隔符,默认分隔符是制表符
-k n[,m] 按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)
sort -n -t ":" -k 3,3 /etc/passwd指定分隔符“:”,用第三字段开头,三字段结尾
3.2 wc命令
wc [选项] 文件名
选项:
-l: 只统计行数
-w: 只统计单词数
-m: 只统计字符数
四、条件判断
4.1按照文件类型进行判断
test -e install.log
[ -e install.log ]
[ -f install.log ] && echo"yes" || echo "no"
4.2按照文件权限进行判断
[ -w install.log ] && echo"yes" || echo "no"
4.3文件直接进行比较
4.4两个整数的比较
4.5字符串的判断
4.6多重条件判断
五、流程控制
5.1 if语句
5.1.1 单分支if条件语句
if [ 条件判断式 ]; then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
单分支条件语句需要注意的几个点:
if语句使用fi结尾,和一般语言使用大括号结尾不同;
[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格;
then后面跟符合条件之后执行的程序,可以放在[]之后用“;”分隔。也可以换行写入,就不需要“;”了。
5.2 case语句
case $cho in
"1")
echo"your select 1 ! "
;;
"2")
echo"your select 3 ! "
;;
"3")
echo"your select 3 ! "
;;
*)
echo"your select others ! "
;;
esac
5.3 for循环
for 变量 in 值1 值2 值3...
do
程序
done
for ((初始值;循环控制条件;参量的变化))
do
程序
done
5.4 while循环和until循环
5.4.1 while循环
while循环是不定循环,也陈作条件循环。只要条件判段式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。
while [ 条件判断式]
do
程序
done
5.4.2 until循环
until循环和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。