一些常用的Linux的Bash脚本:Grep过滤, ln软链接,iptables/firewall防火墙, read读取命令行输入,for循环,useradd新增帐号,awk一点学习实践
# grep: 过滤
常用场景:举例:
查看java进程: ps -ef | grep java
选项 含义 -c 仅列出文件中包含模式的行数 -i 忽略模式中的字母大小写 -l 列出带有匹配行的文件名,不列出具体的匹配行 -n 列出所有的匹配行,并显示行号 -v 列出没有匹配模式的行,可以使用该选项,来排除关键字 -w 把表达式当做一个完整的单字符来搜寻,忽略那些部分匹配的行(匹配整词) -r 递归搜索
组合使用:找出java进程的进程ID
ps -ef | grep java | grep -v grep | awk '{print $2}'
# ln: 链接,快捷方式
常用场景:举例
创建一个文件夹的快捷方式
ln -s /usr/local/redis /home/yuxiaobin/
解释:将/usr/local/redis 目录在 /home/yuxiaobin/ 目录下建一个快捷方式,会在/home/yuxiaobin 目录下 有一个 redis的快捷方式
备注:
s 是软链接,
不加表示硬链接:如果源文件是一个文件,硬链接会复制一份文件
源文件是目录,会不支持硬链接
# iptables 防火墙1
# 查看端口开通情况 iptables -L -n # 临时添加端口 iptables -A INPUT -p tcp --dport 61616 -j ACCEPT # 添加端口--重启有效 vi /etc/rc.d/init.d/iptables service iptables restart
参考文档:https://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html
# firewall 防火墙2
#查看防火墙状态 firewall-cmd --state #停止firewall systemctl stop firewalld.service #禁止firewall开机启动 systemctl disable firewalld.service
#新增开放端口
sudo firewall-cmd --add-port=8002/tcp --permanent
# Read读取命令行输入,并赋值给一个变量
#!/bin/bash #模拟脚本拉取指定git分支 echo "Pls specify branchName:" read branch_name="master" #默认分支名称master if [ $REPLY ] then # echo "start to get code: $REPLY" branch_name=$REPLY else echo "empty======= default is master" #branch_name = "master" fi echo "branchName is $branch_name" #如果命令行输入了,那么这里就是输入的分支名称 git checkout $branch_name
############################################################
############################################################
read -p "Pls input y/n: " yn ##接变量名
if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then
echo "you type $yn, which means yes" && exit 0
elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then
echo "you type $yn, which means no" && exit 0
else
echo "you type $yn, which is invalid" && exit 0
fi
##############执行脚本时,输入参数 sh test.sh thisIsParam ###############################################
#!/bin/bash
# this is for $1 argument for shell $0:脚本名称
if [ "$1" == "" ]; then
echo "pls type your name, ex> $0 someword"
else
echo "Hello $1, how are you today?"
fi
# for循环处理
#!/bin/bash for k in $(ls . | grep .sql | grep 11) #获取当前目录.下 名称包含 11 和 .sql的文件名称 do mv copy/$k copy/$k".bak" #将当前目录的copy目录下的同名文件,重命名为.bak(即备份) cp $k copy/$k #将当前目录.下的 包含11 和 .sql的文件 复制一份到copy目录下(copy一份) done
#1. 当前目录. 有 11.sql, 12.sql, 111.sql
#2. ls grep后,拿到 11.sql, 111.sql
#3. 先备份./copy下 11.sql->11.sql.bak, 111.sql->111.sql.bak
#4. 复制当前目录的11.sql, 111.sql 到./copy
# useradd
# useradd与adduser都是创建新的用户 # 在CentOs下useradd与adduser是没有区别的都是在创建用户,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。 > useradd tomcat -U -m -s /bin/bash > passwd tomcat #这里会让你输入密码
# awk:强大的命令
# Linux AWK Learning Notes https://earthly.dev/blog/awk-examples/ 1. 打印整行数据 ``` awk '{print $0}' 20211118.csv ``` $0:表示整行数据 $1: 表示按照分隔符分隔的第一个,相当于 String.split(",")[0] 2. 指定分隔符 默认分隔符是空格:包括blank,\t ``` awk '{print $1}' 20211118.csv 币种,往来单位,业务编号,三方号,销售,对账日期 USD,ABC有限公司,SN047,HDMUSHAZ37847400,TOMCAT USD,ABC有限公司,SN047,HDMUSHAZ37847400,TOMCAT USD,ABC有限公司,SN052,HDMUSHAZ05929300,TOMCAT USD,ABC有限公司,SN052,HDMUSHAZ05929300,TOMCAT USD,ABC有限公司,SN052,HDMUSHAZ05929300,TOMCAT USD,ABC有限公司,SN052,HDMUSHAZ05929300,TOMCAT ``` csv文件 是通过 -F ',' 来分割 ``` awk -F ',' '{print $1}' 20211118.csv 币种 USD USD USD USD USD USD ``` -F ',' : 指定分隔符,默认awk以空格符(blank,\t)来分割 $1,$2 3. 列数(NF) 行数(NR) NR: Number of Records/Rows 记录行数 total/NR 取平均 NF: Number of Fields in a record. 取一行记录的最后一列数据: $NF ``` awk -F ',' '{total = total+$8; print $NF} END {print NR}' 20211118.csv 对账日期 --$NF: 最后一列 2021-10 2021-10 2021-10 2021-10 2021-10 2021-10 7 --NR: 7行数 ``` 4. 正则过滤包含 打印包含The的行: ``` awk -F '\t' '/The/ { printf "%s \t %-20s \t %s \n", $15, substr($13,1,20), $8}' bookreviews.tsv | head ``` /The/: 正则过滤包含 The 的行,相当于 | grep The %-20s:指定该列打印的宽度20 精确匹配: ``` awk -F ',' '$7 == "海运费" {print $1,$2, $3,$7}' 20211118.csv USD ABC有限公司 SN047 海运费 USD ABC有限公司 SN052 海运费 ``` 5. 定义变量,增加汇总 ``` awk -F ',' '{total = total + $8; printf "%s \t %s \t %-5s \t %s\n", $1, substr($2,1,2), $3, $NF} END {printf "total: %s \t average:%s \n", total, total/NR}' 20211118.csv 币种 往来 业务编号 对账日期 USD AB SN047 2021-10 USD AB SN047 2021-10 USD AB SN052 2021-10 USD AB SN052 2021-10 USD AB SN052 2021-10 USD AB SN052 2021-10 total: 25800 average:3685.71 ```
## 增加2个
查看xxx.log 前200行数据
```
head xxx.log -n 200
```
提花指定文件 指定行 的字符串
```
sed -i '1,10s/12.02.00/11.2.0.4/g' xxx.dmp
```
替换 `xxx.dmp` 文件的 第 `1-10` 行: 把 `12.02.00` 替换成成 `11.2.0.4`
posted on 2023-06-06 20:36 tomcat and jerry 阅读(194) 评论(1) 编辑 收藏 举报