1. 程式人生 > >shell指令碼常用命令與方法總結

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;[email protected]\h\e[0m \e[33;40m\W\e[0m]

2PATH的查詢目錄
PATH=”PATH:/home/gongzuo/exportPATH3echo{#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 atest@Chenyd>a=1;leta+=6;echoa
(3)echo “3*4.12”|bc
echo “scale=2;13/8”|bc ###scale設定精確到極為小數
[email protected]>a=100;echo “obase=2;$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]8date+date+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個字元自動結束               echoa
12 find命令
find /root/cyd/ ! -name “*.sh”
find . -maxdepth 2 -name test.sh #從當前目錄向下查2級目錄
find . -mindepth 15 -name “*” #檢視15級目錄往後的所有
find . -type d #列出從當前目錄開始所有目錄 (f 普通檔案,c字元裝置,b塊裝置,s套接字,p是FIFO)
find . type f -atime -7 最近7天被訪問過的檔案(-mtime修改時間,-ctime變化時間)
find . -type f -size +2M #列印大於2M的檔案,(-2M 是小於)
find . -name sum.sh -delete #找到並刪除
find /var/www/error/ -name “*.var” -exec cat {} \; #找出所有的error檔案並cat
find . -type f -name test.sh | xargs cat; #與exec類似
find . -type f -name test.sh | xargs -0 rm -rf #-0是說明定界符是\0的
13 tr命令(字串替換)
echo 123 |tr ‘0-9’ ‘9876543210’ #加密
echo 123 |tr ‘9876543210’ ‘0-9’ #解密
echo 12311aaaaaaaaa | tr -d ‘0-9’ #-d引數刪除‘0-9’的字元
14 sort和unqi
cat a.txt |uniq -c|sort -r #去重複行並顯示重複次數,逆向排序
15 分割檔案
split -b 10k date.file #把date.file分割成多個10k大小的檔案
split -b 1k data.file -d -a 4 file #定義前後綴名
16 批量重新命名檔名
find . -type f -exec rename ‘s/ /_/g’ {} \; #將當前目錄中檔名中的空格替換為下劃線
eg:
count=1
for i in find . -iname "*.log"
do
new=error-countechoRenamei to newmvi $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 正則
^起始 結束  [^ab]除ab之外的字元  [ab]a與b之間選一個  {n,m} 匹配n到m次     ? 匹配之前項0到1次       +匹配1到多次        *匹配0到多次  22 grep使用正則(egrep和grep -E)     egrep –color=auto -n “W[Ei]+” /home/conf/bds-config.xml     egrep -o –color=auto -n “[0-9]{1,3}.[0-9]{1,3}.[0-9]{3}.[0-9]{1,3}” /home/bds/conf/bds-config.xml  #找出iP地址     grep 引數 -n列印前帶行數  -c統計行數  -A 3 列印匹配字元之後的3行,-B 3列印字元匹配之前的3行, -V列印不包括字元的其他行     -A 1 新增—的定界符  23 cut -d ’ ’  -f3   #-d新增定界符  -f顯示第三列  24 sed     sed ‘s/var1/var2/’ file  #替換每一行匹配的第一個匹配項     sed ‘s/var1/var2/g’ file #替換所有匹配的內容      sed ‘s/var1/var2/ng’ file #替換每行從匹配的第n處開始     sed ‘s/^/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,(NF-3),$(NF-2)}'   #實時提取top中pid該程序的command,pid,cpu%,mem%
37 在shell中執行sql語句
(1)mysql –user=root –password=