shell中文本处理工具和正则表达式比较重要
三、一个最简单的shell脚本程序(helloworld)
第一行#!/bin/bash是告诉内核该使用什么来解析这个shell脚本程序
echo为shell脚本中的输出语句
四、变量的定义与输出
如果name变量后面没有空格紧接着接字符串,那么它会把name加上那段字符串当做一个变量名,这样肯定找不到那个变量,为了解决这个问题,那么给name变量加上一个大括号就可以了。
上图为在脚本中给变量赋值,那么想要让用户通过键盘输入给变量赋值应该怎么办呢?(此时需要使用read)
将用户在键盘上输入的值赋给变量name1
五、shell脚本中单引号与双引号的区别
在shell脚本中,双引号它可以读取变量,将$符后面变量的值读取出来
shell脚本中单引号也可以输出一个字符串,那么它跟双引号有什么区别呢?
单引号里面,它不会解析$符号所表示的变量
六、反撇号“`”的作用
shell脚本会把反撇号里面的内容也当做是一条Linux命令,并将命令的执行结果返回。例如:echo `date`这个输出的结果就是当前时间。
七、自定义变量的删除
使用unset 变量名
八、shell脚本的位置变量
在调用shell脚本的时候需要传入一些参数,此时就需要使用位置变量
$1表示传进来的第一个参数,$2表示传进来的第二个参数...
$*表示输入的所有位置参数,它可以获取到$9之后输入的参数
$#表示的是输入的所有的位置参数的个数
九、if语句(if后面跟条件测试)
十、shell脚本中case语句
十一、条件测试、整数测试、字符串测试、逻辑测试(逻辑与&&、逻辑或||具有开关特性)
十二、for循环
#!bin/bash
total=0
for i in {1,2,3,4,5};do
total=$(($total+$i))
done
echo $total
shell脚本里面进行变量运算的时候要放在$(())里面
十三、while循环
tt=0
index=0
while [[ $index -le 6 ]];do
tt=$(($tt+$index))
index=$index+1
done
echo $tt
十四、until循环
tt1=0
index1=0
until [[ $index1 -gt 10 ]];do
tt1=$(($tt1+$index1))
index1=$index1+1
done
echo $tt1
十五、函数的定义与调用
#!bin/bash
#定义函数say_hello
function say_hello(){
echo "this is a function"
}
#调用函数(不需要括号)
say_hello
#函数的传参
function study(){
echo "$1正在学习$2"
}
study "张三" shell
十六、正则表达式
grep -rn "xxx" ./:在当前目录下递归匹配包含xxx的行,并打印出行号
^xxx:匹配以xxx开头的行
$:匹配以xxx结尾的行
.:匹配任意字符
.+:匹配一个或一个以上的任意字符
()+:匹配任意多个字符串
(){}:匹配指定个数字符串,例:grep -En "(xjy){2} ./test.txt"
.*:匹配零个或多个任意字符
[]:匹配指定范围内任意一个字符
\:转义符,取消元字符的特殊含义
十七、find命令
-name参数:根据名字查找文件或目录
-perm参数:根据权限进行查找,permission的缩写。例:find . -perm 644(在当前目录下查找权限为644的文件或目录)
-user参数:根据所属用户进行查找
-mtime参数:
-mtime n 按照文件的更改时间来找文件,n为整数。
n表示文件更改时间距离为n天, -n表示文件更改时间距离在n天以内,+n表示文件更改时间距离在n天以前。
例如:
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间不到1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)的文件。
-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间2天(48小时)之外的文件
-mtime -1 表示文件修改时间为小于1天的文件,即距离当前时间1天(24小时)之内的文件
为什么-mtime+1 表示文件修改时间为大于1天的文件,即距离当前时间48小时之外的文件,而不是24小时之外的呢?
因为n值只能是整数,即比1大的最近的整数是2,所有-mtime+1不是比当前时间大于1天(24小时),而是比当前时间大于2天(48小时)。
-size参数:根据文件大小进行查找。例:find . -size +300c(在当前目录下查找300字节以上的文件,c是字节的意思)
十八、xargs配合find使用
xargs对查找出来的文件进行统一处理
find . -size +300c -name "*.sh"|xargs chmod 777 对查找出来的文件赋予777的权限
十九、grep命令
文本处理工具,返回的结果是以行为单位的
基本用法:grep -n "echo" ./helloworld.sh(返回包含echo的行,并标注行号)
-c参数:统计匹配行的行数。例:grep -c "echo" ./helloworld.sh(统计helloworld.sh文件中包含echo的行的行数)
-n参数:不仅输出匹配行,同时输出匹配行的行号
-i参数:查找的时候不区分大小写
-v参数:查找不包括xxx的行。例:grep -v "echo" ./helloworld.sh(查找helloworld.sh文件中不包含echo的行)
-E参数:把后面的内容支持正则表达式
二十、awk命令
文本处理工具,返回的结果是以列为单位的。
基本用法:不带参数awk '{print $1}' test.txt(打印test.txt文件中的第一列,默认使用空格分隔)
-F参数:指定分隔符,awk -F'|' '{print $1}' test.txt(打印test.txt文件中的第一列,使用|作为分隔符)
~:匹配,!~:不匹配,例:awk -F'|' '$1~/x/ {print $3}' test.txt:test.txt文件中第一列若跟x匹配,那么就将第三列打印出来
二十一、sed命令
文本处理工具,行定位,打印出定位到的某一行。
sed -n '2'p test.txt:把test.txt文件中的第二行打印出来
sed -n '2,5'p test.txt:把test.txt文件中的第二行到第五行打印出来
sed -n '/cyy/'p test2.txt:把test2.txt文件中匹配cyy的行打印出来
sed -i 's/原字符串/替换字符串/g' filename //替换文件中的所有匹配项
sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换
-i 表示inplace edit,就地修改文件
二十二、uniq命令
文本处理工具,将相邻行去重
uniq test2.txt(将test2.txt中相邻行去重)
-c参数:统计相邻重复行行数。uniq -c test2.txt(将test2.txt中相邻行去重,并统计行数)
-d参数:只打印重复行。
二十三、sort命令
对文本内容进行排序
r:反序、t:指定分隔符、k:指定根据哪一列排序
二十四、split命令
分割文件
split -2 test2.txt test4.txt(以每两行为单位对test2.txt文件进行分割,分割后的内容存放在以test4开头的文件中)