工作中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=“[email protected]”
[email protected]_dd#source /etc/profile
5 算術運算
(1)echo $[ 3 + 2 ]
echo $(( 3 + 2 ))
(2)[email protected]>let a=4+3;echo $a
[email protected]>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 [email protected] ‘command’ #直接傳指令向遠端伺服器
ssh [email protected] -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
[[email protected] cyd]# find ./ -type f|xargs ls -l
[[email protected] 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