Shell编程

一、正则表达式

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按照文件权限进行判断

Linux教程

[ -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循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值