工作中shell脚本,经常用的语法,整理了下
1 echo带色的 打印字符串带色(31红色,32绿色,33黄色,34蓝色)
打印字符串背景带色 (40黑色,41红色,42绿色,黄色43,蓝色44,白色47)
echo -e “\e[31;43m Hello Word\n Hello word \e[0m”
echo -e “\e[31;43m Hello Word\n Hello word \e[0m”
export PS1="[\e[31;40m\u\e[0m \e[32;40m@\h\e[0m \e[33;40m\W\e[0m]
"
2
添
加
常
用
目
录
为
" 2 添加常用目录为
"2添加常用目录为PATH的查找目录
PATH="$PATH:/home/gongzuo/"
export PATH
3 获取变量的长度
echo ${#HOME}
4 修改系统中的一些常用变量(如PS1)对所有用户永远生效
vim /etc/profile
PS1=“test@test”
test@test_dd#source /etc/profile
5 算术运算
(1)echo $[ 3 + 2 ]
echo $(( 3 + 2 ))
(2)test@test>let a=4+3;echo $a
test@test>a=1;let a+=6;echo KaTeX parse error: Expected 'EOF', got '#' at position 58: …=2;13/8"|bc #̲##scale设置精确到极为小…a"|bc #####进制转化
6 打印信息分类
cat a.* 2>err.log 1>stbout.log ###标准输出重定向到stbout.log,标准错误重定向到err.log
7 数组
a=(1 2 3)
echo ${a[]}
echo ${a[2]}
echo ${a[1]}
8 显示时间格式
date “+%Y %B %d”
date +%s #打印纪元时
9 脚本参数
$@ 一次性打印所有参数,作为一个实体
$ 一次性打印所有参数,单个参数作为一个实体
$? 检测是否执行成功,成功打印0
$# 总计几个参数
10 函数格式
function test()
{
echo “test test”
}
test
11 read
(1)read -p “plesase input number” a
echo $a
(2)read -n 5 a #输入5个字符自动结束
echo KaTeX parse error: Expected 'EOF', got '#' at position 87: …me test.sh #̲从当前目录向下查2级目录 f…count
echo “Rename $i to $new”
mv $i $new
let count++
done
17 dd命令(测试磁盘性能,备份数据,清除数据,写固定文件)
dd if=/dev/zero of=test.file bs=1M count=1
18 comm 对比两文件中字符的差异(默认输出3块,第一块是a中有的,第二是b中有的,第三是ab都有的)
comm a b
comm a b -1 -2 #删掉ab不同的字符,输出ab相同的字符
comm a b -3 |sed ‘s/^\t//g’ #输出ab不同的字符,sed屏蔽字符前的空格
19 环回文件系统 :指把一个文件格式文件系统后,挂载后使用(非实体硬件)
20 wc命令
cat file |wc -l #统计行数
cat file |wc -w #统计单词数
21 正则
^起始 KaTeX parse error: Can't use function '\.' in math mode at position 217: … -n "[0-9]{1,3}\̲.̲[0-9]{1,3}\.[0-…/d’ file #移除空白行
sed ‘s/aa/&BB/’ file #&表示之前匹配到的字符。
25 awk
awk ‘BEGIN { print “start”} {print } END{print “end”}’
awk -F “:” ‘{ print $2 }’ #定界符
26 dhclient em1 动态通过dhcp获取ip地址
ifconfig |cut -c-10|tr -d ’ ’ |tr -s ‘\n’ #打印前10个字符,tr -d删除每行空格,tr -s 压缩空格行
route add default gw 1.1.1.1 em1
ping -c 2 #-c尝试2次
27 ssh
ssh root@1.1.1.1 ‘command’ #直接传命令向远端服务器
ssh root@1.1.1.1 -p 422
28 lsof
lsof -i:8080
lsof -i
29 套接字
nc -l 1234 #监听服务器
nc host—ip 1234 #连接端
30 time
time sh a.sh #记录a.sh执行完的时间
31 last 列出上一次启动用户登录的信息
lastb 登录失败的信息
32 watch ‘ls -l’ #监控这个目录的文件,
33 logrotate 将日志文件轮询限制在一定的大小里。
34 ps -eo pcpu,pid, #e是every o是制定输出的列
ps -eo comm,pid,pcpu --sort -pcpu|head -n 20 #sort对输出的列排序,+—— 是排序方式。
pgrep httpd #打印进程号
35 kill
pkill httpd #按进程名字kill
36 top
top -Hp $pid -bn1|grep daemgr|awk ‘{print $(NF),
1
,
(
N
F
−
3
)
,
1,(NF-3),
1,(NF−3),(NF-2)}’ #实时提取top中
p
i
d
该
进
程
的
c
o
m
m
a
n
d
,
p
i
d
,
c
p
u
37
在
s
h
e
l
l
中
执
行
s
q
l
语
句
(
1
)
m
y
s
q
l
−
−
u
s
e
r
=
r
o
o
t
−
−
p
a
s
s
w
o
r
d
=
pid该进程的command,pid,cpu%,mem% 37 在shell中执行sql语句 (1)mysql --user=root --password=
pid该进程的command,pid,cpu37在shell中执行sql语句(1)mysql−−user=root−−password=passwd --database=bds -e "select * from sample limit 10 "
(2)echo “select count() from sample"|mysql -uroot -p
p
a
s
s
w
d
−
−
d
a
t
a
b
a
s
e
=
b
d
s
(
3
)
m
y
s
q
l
正
则
的
用
法
m
y
s
q
l
−
u
r
o
o
t
−
p
passwd --database=bds (3)mysql正则的用法 mysql -uroot -p
passwd−−database=bds(3)mysql正则的用法mysql−uroot−ppasswd --database=bds -e "select * from sample where sample_name REGEXP '[fav]orm’”;
select sample_name from sample where sample_name like ‘%ac%’;
38 mysql基本语法
1delete: DELETE FROM runoob_tbl WHERE sample_id=3;
2update: UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
update tcphdr set sid=3 where cid=‘39’;
3insert:insert into samples values (‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’); #新增加一行,按列的多少和类型填入
4alert:alter table aaa add age char; #新添加一列
5 create database cyd;
6 create TABLE CHEN (ID INT, NAMN CHAR, TIME DATE);
7 select max(id) as max_id from aaa; #函数用法
8 select * from aaa where name in (‘A’,‘B’); #取出name是AB的行
9 select SUM(id) as sum from aaa;
10 select id from aaa order by id;
11 select id from aaa order by id desc; #逆序排序
12 select name,sum(sale) as total from aaa group by name; #按名字排序消费总和
13 ELECT ns_app_ptl,count(ns_app_ptl) as count FROM network_session GROUP BY ns_app_ptl ORDER BY count asc limit 10;
order by count asc 从小到大排序
order by count desc 从conut列的大到小排序
GROUP BY ns_app_ptl 按ns_app_pt1列中的类型统计计数。
39 tcpdump
tcpdump -i em4 dst port 25 or src port 25
40 tcpreplay
tcpreplay -i em2 smtp.pcap03 (em2和em3环起来,在em2回放,em3上去监听)
41 tar的打包与解包
(1)打包:tar -z(j)cvf xxx.tar.gz /root/kaifa/*
(2)解包:tar -zxvf xxx.tar.gz
#####z表示有gzip属性,j表示有bzip2属性。c是create打包 v列出详情,r是追加(向已经有的压缩文件中加文件)f文件的名字(这个名字是自己定义的) + 打包的文件or目录
(3) rar 压缩rar xx.rar .jpg
解包unrar e xx.rar
(4) zip 压缩 zip xx.zip /home/kaifa/
解包 unzip xx.zip
42 route (U 是路由,GU是网关)
route按主机名称列出来
route add default gw 192.168.1.2
route -n 按网络地址列出来
route add -net 10.11.1.0/8 gw 192.168.3.1 dev em1 添加路由
route add -net 172.168.1.0 netmask 255.255.0.0 reject 添加拒绝路由
route del -net 10.0.0.0 netmask 255.0.0.0 reject 删除拒绝路由
43 img转成qcow2
qemu-img convert -f raw centos.img -O qcow2 centos.qcow
44.exce和xargs
[root@LanyEye cyd]# find ./ -type f|xargs ls -l
[root@LanyEye cyd]# find ./ -type f -exec ls -l {} ;
ps -ef | grep suricata |grep -v grep| awk ‘{print $2}’ | xargs -i kill {}
45 打印出16进制的
附:实例
#扫描局域网中存活的主机个数
#!/bin/bash
#file-name:ip_scan.sh
for ip in 192.168.9.{1..254};
do
ping $ip -c 2 2>&1 >/dev/null
if [ $? == 0 ]
then
echo $ip >>alive.txt #存活的主机写入alive文件
else
echo $ip >>error.txt #不存活的自己写入error文件
fi
done