shell脚本精简

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开头的文件中)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值