shell脚本常用命令与方法总结

工作中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 添加常用目录为 "2PATH的查找目录
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,(NF3),(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= pidcommandpidcpu37shellsql1mysqluser=rootpassword=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 passwddatabase=bds3mysqlmysqlurootppasswd --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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值