变量替换
1.${变量#匹配规则} #从头开始匹配,最短删除。
2.${变量##匹配规则} #从头开始匹配,最长删除。
3.${变量%匹配规则} #从末尾开始匹配,最短删除。
4.${变量%%匹配规则}#从末尾开始匹配,最长删除。
5.${变量/旧字符/新字符}#匹配第一个旧字符并且替换。
6.${变量//旧字符/新字符}#匹配所有旧 字符并且替换。
举例使用echo ${var#*is}
变量测试
var=${str-expr} 若str未定义则取值expr ;若str定义了“”或者其他值则取值其他定义的值;
字符串处理
计算字符串长度
1.${#String} 2.expr lenth $String
计算字符在字符串中的位置
expr index "$var1" start 若包含start则按start查找 若不包含则按照字符查找第一个字符为准。
若赋值expr 则len=`expr index "$var1" start` 对一个不是单引号 是反斜线
匹配字符串在字符串中的位置
expr match "$var1" start 匹配字符串中的位置 从头开始匹配
输出系统下所有用户的
cat /etc/passwd | cut -d ":" - f 1 (cat 查看passwd文件 cut 指定分隔符为: -f 指定第一个分隔的内容)
shell命令替换与算数运算
1.· · 双反斜线命令替换
2.$( ) 引用命令替换
3.$(()) 双括号算数运算
shell命令过滤 不想看见的命令 shell命令过滤后打印出来的进程有几行
grep -v 不想看见的东西 看有几行wc -l
shell关闭摸个进程
systemctl stop nginx 关闭nginx进程
shell定义变量类型
declare typeset
declare -r 变量声明为只读类型 取消使用+r
declare -i 声明int变量 声明接收值的类型
declare -f 显示系统定义好的方法函数 显示函数内容
declare -F 显示系统定义好的方法函数 不显示函数内容
declare -a 定义array数组
declare -x 声明环境变量 声明变量后该变量可以在脚本中引用而不局限于当前终端有效
shell判断是否为正整数
通过将数值相加整数值 并指向dev/null
$num + 0 &>
/dev/null
flag=true
read -p "please input a number:" num
while $flag
do
expr $num + 0 &>/dev/null
[ $? -eq 0 ] && flag=false || read -p "please input a integer:" num
done
shell 在边界脚本中加入$$打印子进程:
shell将输出内内容放入到垃圾桶 &>/dev/null 然后只保存返回值 不过问题较多不建议使用
使用$?接取上方命令的返回值
shell 获取脚本详细执行过程 sh -x demo.sh
shell 查看当前目录
pwd which source
shell 查看系统内存使用情况与查看磁盘使用情况
free -m df-h
shell grep的使用 过滤文件里面的内容
grep [内容] [文件名] 例如 grep shell ok.txt
-v 表示反选
-i 表示 忽略大小写
-n表示 显示行号
-E表示支持扩展
-F 表示支持正则表达式
-r 递归搜索
shell 命令之选项操作
find 【路径】【选项】【操作】
find ./ -name 'ok*' 表示在当前目录搜索开头为ok的内容 ,这里需要用单引号引入而不是反斜线
find /etc -mtime -5 -name '*.conf' 查找etc目录下5天修改且以conf为结尾的文件
这里添加条件可以直接附加添加条件。
-5 表示时间范围之内 +5表示时间范围之外的
-size 表示按照文件大小查找 -1M 表示小于1M的文件, +1M 表示大于1M的文件
find . -path ./demo1 -prune -o -type f 表示过滤demo1文件搜索 -prune -o -p 为固定格式写错报错
find 命令操作完成后继续其他操作的命令-exec
例如 find ./etc -size =1M -exec cp {} ./test_5/ \; 大括号表示前段命令执行获得的内容(注意后面需要加 \: 而且该组合之前需加空格)
删除7天以前的日志
find /var/log -name '*.log' -mtime +7 -exec rm -rf {} \;
-name 表示指定文件名 -exec 指定第二段操作命令 {}表示上端的命令执行结果 \; 反斜杠*号表示固定格式
逻辑运算符 -a -o -not|! 与 或 非
-exec 与 -ok的区别 就是提示与不提示的区别 -ok会提示是否 y
find与locate 命令的区别 find命令是在整块磁盘中搜索 locate命令是在数据库文件中查找
find是每人全部匹配 locate默认是部分匹配
linux数据库更新
/var/lib/mlocate/mlocate.db 表示linux数据库下的文件操作记录数据库
更新数据库 updatedb 更新时间比较长 数据更新后 使用locate a.txt
查找可执行文件命令 二进制 which mysql
查找可执行文件帮助文档 whereis mysql
locate 查找单个文件 查找速度快
linux shell 之 sed命令 流编辑器
第一种形式 stdoud | sed [option] "pattern command"
第二种形式 sed [option] "pattern command" file 例如(sed -n '/ok/p' sed.txt)
sed ‘p’ sed.txt p是打印输出 打印两遍 本身一遍 输出一遍
sed -n sed.txt p 静默打印 只打印输出
sed -n -e '/ok/p' -e '/oks/p sed.txt -e表示指定pc模式 多个需要加-e 单个不需要加
sed -n -f edit.sed sed.txt -f表示将pc写入指定文件中进行匹配
sed -n -r '/python|PYTHON/p' sed.txt -r表示支持扩展中的表达式
sed -n 's/love/like/2g' sed.txt 1g 2g ig /g表示替换全部 /2g 便是从第二个开始替换全部 /ig表示忽略大小写替换
=表示只显示行号
sed -n 's/love/like/g' sed.txt s/ /g 表示固定格式 s是要被替换的 g表示替换的,例如(sed -n 's/love/like/g' sed.txt)
以上操作无法修改文件内容 需要使用-i 加上该参数就可以 了。-n -i 无法会导致文件被清空
sed -n '/ok/,10' sed.txt 文件的匹配行号模式^表示为脱字符 表示为以什么什么为开头。
sed编辑命令用法
查询
1.p --------打印 2.d-------删除
增加
3.a -----匹配到行后追加内容
4.i ------匹配到行前追加内容
5.r ------将后面指定文件的内容追加到匹配的行的后面(将文件内容追加到后面)
6.w------将匹配到行的内容另存到其他文件中(匹配文本内容并保存到其他行)
修改
sed 之反向引用
sed -i 's/had..p/&s/g' sed.txt &表示引用之前的内容
echo sed使用举例说明 echo "`sed -n '/\['$1'\]/,/\[.*\]/p' $filename`" 在引用其他变量的时候不可放在'单引号中'需要隔离出来
vim ok.txt 进入文件编辑的时候 使用/搜索的内容超找文件内容
awk 'BEGIN{} pattern {command} END{}' awk大约可以分为4个部分 BEGIN{} pattern 匹配规则 command命令执行
END{}结束部分
awk 'BEGIN{FS=":"} {print $1}' passwd FS表示指定分隔符 $1表示分隔后的第一个字符(passwd为操作文件)
如果没有设置FS分隔符则默认按照空格来设置分隔符
例如 awk 'BEGIN{print $1}' passwd
NF 的使用指定字段个数 分隔符空格 分隔成的个数 例如awk '{print NF}' passwd
NR 表示输出该文件的行号 例如awk '{print NR}' passwd
FNR 表示多行文件的行号输出 例如 awk'print FNR' passwd ok.txt
表示分别输出后面2个文件的行号
初始文本内容为java|python|c++--mklie|jay|clili--apple|bear
awk 处理结果为 awk 'BEGIN{RS="--";FS="|"} {print $1}' awktest.txt RS表示纵向的分隔符默认为换行符
FS表示文件的横向分隔 2个命令之间用;分隔 上图为组合的用法
ORS输出纵向分隔符 awk 'BEGIN{RS="--";FS="|";ORS="*"} {print $1}' awktest.txt
输出结果如下java*mklie*apple*
OFS输出横向分隔符 awk 'BEGIN{RS="--";FS="|";ORS="*";OFS="|"} {print $1,$2}' awktest.txt
printf 格式说明 %s 字符 %d 打印10进制整数
printf 的用法 awk 'BEGIN{FS=":"} {printf" %s\n",$1}' passwd 指定输出的类型 输出多个需要,分隔
awk 逻辑运算比较大小命令 awk 'BEGIN{FS=":"}$3<50{print $0}' passwd 备注==号可用于数字或者字符串判断
awk 正则匹配awk 'BEGIN{FS=":"}$3~/[0-9]{3,}/{print$0}' passwd 备注 ~//为匹配正则表达式固定写法 释义 匹配第三段字符
0-9的并匹配三次
awk 'BEGIN{FS=":"}$1=="root"||$1=="liyuan"{print $0}' passwd 备注 基于关系运算符
awk条件语句 if
awk 'BEGIN{FS=":"}{if($3<50) print $1}' passwd 备注 找出文件中的小于50的并输出$1
awk 指定awk文件执行脚本 awk -f userpawd.awk passwd 备注-f为引用
userpawd.awk 文件内容如下
1 BEGIN{
2 FS=":"
3 }
4
5 {
6 if($3<50)
7 {
8 printf "%-10s%-5d\n",$1,$3
9 }
10 }
注意事项 BEGIN 标签后面需要直接接大括号不可换行 左右对齐需要在%与s之间(类似)
awk 数据计算运算符
awk 'BEGIN{x=20;y=2;print x^y}' ^脱字符与**表示 多少次方
index的用法
awk 'BEGIN{str="I have a dream "; loc=index(str,"a") ; print loc }'
awk中常用选项
-v 传递参数(引入外部变量) -f引用脚本文件 -F指定分隔符 -V查看awk版本
shell中数组的操作
shell与awk命令数组的区别 shell下标是从0开始的 awk下标是从1开始的
array={"a" "b" "c" "d"} 修改数组中的元素array[1]="c"
输出数组中的位置 shell引用下标为之前的存储下标
mysql数据库操作分配权限
grant all on school .* to dbuser@'%' identified by '12356' 备注注释 分配all表示所有权限 在数据库school 中 @'%'表示
所有人 id表示设置密码
yum 下载安装软件包
yum install mariadb mariadb-server mariadb-libs-y 安装需要的软件包(例如安装mysql)
网络端口监听
netstat -tnlp|grep :3306 过滤网络监听接口