美文网首页
Linux简单学习记录(八)

Linux简单学习记录(八)

作者: Hugh1029 | 来源:发表于2018-08-08 20:34 被阅读0次

正则表达式和Shell脚本

一、正则表达式

1.grep与egrep工具

grep命令的格式
grep [-cinvABC] 'word' filename
-c 表示要打印的行数
-i 忽略大小写
-n 输出符合要求的行和行号
-v 表示打印不符合要求的行
-A 后面跟一个数字,例如-A2表示打印符合要求的行以及下面的两行
-B 后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行
-C 后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行

实例说明

grep -n '关键词' 文件 过滤出文件中待这个关键词的行,且显示行号


image.png

grep -v '关键词' 文件名 过滤不符合要求的行
与n组合使用,显示不符合要求的行和行号

image.png
在linux中,^表示行开头, image.png

替换命令,s操作,g表示全局
如: sed '1,9s'/2/8/g test.txt 1到9行所有的2替换为8


image.png

直接修改文件内容 -i操作
sed -i 's/2/8' test.txt 把2换成8

3.awk工具的使用

awk兼具sed的所有功能,并且更强大。
awk的使用很复杂,甚至有专门的书介绍。常用的命令如下:
3.1 awk -F 指定分隔符
eg: head -n2 test.txt | awk -F':' 'print 1' 不加-F,默认是空格和tab为分隔符,1,2指的是第一个字段,第二个字段,0表示整行
注意格式,-F后面紧跟分隔符

3.2 匹配字符或者字符串
awk '/oo/' test.txt 匹配字符,类似sed的用法
awk -F':' '1 ~/oo/' test.txt 在第一个字段里去匹配 多次匹配 awk -F ':' '/root/' {print1,2} /test/ {print1,$3}

3.3 条件操作符
awk -F ':' '$3=="o"' /etc/passwd

3.4 awk内置变量
OFS、NF、NR
OFS和-F类似功能,用来定义分隔符的
NF表示用分隔符分割后一共有多少段
NR表示行号
OFS用法:
head -5 /etc/passwd | awk -F ':' '{OFS="#"}' {print 1,3, $4}

NF用法:
head -n3 /etc/passwd |awk -F ':' '{print NF}'
$NF 最后一段的值

NR用法
head -n3 /etc/passwd | awk -F ':' '{print NR}'

3.5 awk的数学运算

二、shell脚本

1.基本脚本介绍

脚本建议放在/usr/local/sbin中
脚本开头#! /bin/bash
脚本名以.sh结尾
执行脚本:sh first.sh 或者./first.sh ,第一种需要添加执行权限,chmod +x first.sh
第一个脚本:

#!  /bin/bash

#  this is first shell script
#  writen by name 2018-8-8

date
echo "Hello World";

输出结果:


image.png
2. 命令date

常用的date用法如下:

date  +%Y  四位数字打印年份
date  +%y  2位数字打印年份
date  +%m  月份
date  +%d  日期
date  +%H  小时
date  +%M  分钟
date  +%S  表示秒
date  +%w  星期

eg:
date +"%Y-%m-%d %H:%M:%s"
date -d "-1 day" +%d #前一天的日期
date -d "-1 hour" +%H #前一个小时

3. shell中的变量

定义变量的方式是:变量名=变量值
其中反引号``中的内容表示安装shell脚本执行。

#!  /bin/bash
#  the shell is exanple2
#  writen by name 2018-8-8
d=`date +%H:%M:%S`
echo 'the script begin at $d'
echo "now we sleep 5 seconds"
sleep 5
d1=`date +%H:%M:%S`
echo "the script end at $d1"
4.数学运算

数学运算要用[](方括号)括起来,切方括号前要加符号$

#! /bin/bash
#  这是数学运算的shell脚本
#  writen in 2018-8-8

a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
4. 和用户交互

read命令用于和用户交互,它把用户输入的字符串作为变量值。

#! /bin/bash
##  useing read in shell script
## 2018-8-9
read -p "please input a number:" x
read -p "please input another number" y
sum=$[$x+$y]
echo "the sum of numbers is: $sum" 
5. shell脚本预设变量

在执行脚本的时候,后面可以加参数,如同java一样
如下脚本:

#! /bin/bash
## 预设变量
sum=$[$1+$2]
echo "sum is $sum"

执行时候,使用sh option.sh 10 20 来执行,那么1和2分别指的是第一个和第二个参数,$0表示脚本的名字

6. shell脚本中的if判断

格式:

if  判断语句;  then
  command
fi
#! /bin/bash
## if的使用
read -p "please input a number" a
if((a<60)); then
  echo  "you didn't pass this exam"
fi  

((a<60))是shell中特有的样式,只有一对是报错的,当然还有另外的方式

7. 带else的判断

格式:

if 判断语句;then
  command
else
  command
fi
8. 带elif(其他语言中的else if)

格式:

if 判断语句; then
  command
elif  判断语句2; then
  command
else
  command
fi

判断数值的时候使用(()),也可以使用[],但是在[]中不能使用>、<、=符号,使用讴歌
-lt:小于,-gt:大于,-le:小于等于,-ge:大于等于,-eq:等于,-ne:不等于

9. 和文档相关的判断

可以使用if操作去判断文档的二属性,常见操作如下:

-e  判断文件或目录是否存在
-d  判断是不是目录以及是否存在
-f   判断是不是普通文件以及是否存在
-r  是否有读权限
-w  是否有写权限
-x  是否可执行

例如:

if[-e filename];then
  command
fi
10. case逻辑判断

格式:

case 变量 in
value1)
  command;;
value2)
  command;;
value3)
  command;;
*)
  command;;
esac
11.for循环

格式:

for  变量名  in  循环条件;  do
  command
done

例如:

#! /bin/bash
## for循环使用

for  i  in  `seq 1  5`;do
  echo $i
done

注:seq 1 5 表示从1到5的序列

12.while循环

格式:

while  条件;  do
  command
done

eg:

a=5
while  [ $a -ge 1 ];do
  echo $a
  a=$[$a-1]
done

注:[后面有空格,]前面有空格

#######13.shell脚本中的函数
格式:

function 函数名() {
  command 
  command
}

eg:

#! /bin/bash

function sum() {
  sum = $[$1+$2]
  echo $sum
}
sum $1  $2
14.shell脚本中的中断和连续

break:结束循环
continue:结束本次循环
exit:直接退出shell脚本
与Java等语言类似
eg:

#! /bin/bash
##

for i in `seq 1 5`
do
  echo $i
  if[ $i == 3 ]
  then 
    break
  fi
  echo $i
done

相关文章

网友评论

      本文标题:Linux简单学习记录(八)

      本文链接:https://www.haomeiwen.com/subject/rbiyvftx.html