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]PATH的查詢目錄
PATH=”{#HOME}
4 修改系統中的一些常用變數(如PS1)對所有使用者永遠生效
vim /etc/profile
PS1=”[email protected]”
[email protected]_dd#source /etc/profile
5 算術運算
(1)echo (( 3 + 2 ))
(2)[email protected]
(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[2]}
echo @ 一次性列印所有引數,作為一個實體
? 檢測是否執行成功,成功列印0
$# 總計幾個引數
10 函式格式
function test()
{
echo “test test”
}
test
11 read
(1)read -p “plesase input number” a
echo a
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-i to 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 正則
^起始 /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該程序的command,pid,cpu%,mem%
37 在shell中執行sql語句
(1)mysql –user=root –password=