實際案例
1.判斷接收參數個數大於1 shell
[ $# -lt 1 ] && echo "至少須要一個參數" && { echo "我要退出了.... "; exit; } || echo "搞到參數"編程
2.統計文件夾 和 文件數centos
let etcd=`ls -l /etc| grep "^d"|wc -l`bash
let etcf=`ls -l /etc| grep "^-"|wc -l`app
let sum=$[$etcd+$etcf]ide
3.取某列的最大值centos7
number=`df | grep '^/dev' | tr -s " " " "|cut -d" " -f5|tr -s "%" " "|sort -n|tail -n1`spa
4.短路條件判斷線程
[ $# -ne 2 ] && echo "need two args" && exit調試
5.統計文件的空白行
let b=`grep '^$' $2|wc -l`
6.ping通遠程主機
ping -c2 $1 &> /dev/null
[ $? -eq 0 ] && echo "$1 能夠被ping通" || echo "$1 不能夠被ping通"
7.一次性刪除大批量文件
ls |xargs rm -rf 當刪除的文件數量過多,超過了所支持的參數數量上限時,可配合管道及xargs來刪除。
8.刪除文件中不連續的重複行
當file中的重複行再也不一塊兒的時候,uniq無法刪除全部的重複行。通過排序後,全部相同的行都在相鄰,所以unqi能夠正常刪除重複行。
9.分組倒序排序列表
cat access_log | cut -d" " -f1|sort|uniq -c|sort -nr|head -n10
10.把多條命令當成一條命令集合來執行
id $1 &> /dev/null && echo "$1 user has added" || { useradd $1; echo "add user $1 success"; }
11.查看文件夾和文件的大小 du -sh
[root@centos7 ~]# du -sh appserver/ appserver是目錄
5.0M appserver/
[root@centos7 ~]# du -sh f1 f1是文件
4.0K f1
12.查看端口占用狀況
一、lsof -i:端口號 用於查看某一端口的佔用狀況,好比查看8000端口使用狀況,lsof -i:8000
能夠看到8000端口已經被輕量級文件系統轉發服務lwfs佔用
二、netstat -tunlp |grep 端口號,用於查看指定的端口號的進程狀況,如查看8000端口的狀況,netstat -tunlp |grep 8000
shell編程知識點
1.(cmd1;exit;) 和 {cmd2;exit;}的區別
()會開啓一個子線程,exit退出的是子進程,對執行線程沒有影響
{ }不會開啓子線程,exit退出的是執行進程自己.
2.source .bashrc和bash .bashrc的區別
source 表示.bashrc在當前shell進程中運行
bash 會開啓一個子shell進程來執行當前shell 腳本
3.字符串匹配
[ "$var"="ha" ] 精確判斷$var字符串是否等於ha
[[ "$var" ~="regx" ]]
[ x"$var"="x" ] 判斷$var字符串是否爲空
4.變量格式的保留
echo $name 把全部的行壓縮成了一行,不保留文件內容換行格式.
echo "$name" 添加雙引號保留原文件內容的換行格式.
5.bash調試方式
1.檢查語法錯誤 bash -n test.sh
2.跟蹤調試執行腳本 bash -x test.sh
6.bash的配置文件
1.全局配置
1./etc/profile
2./etc/profile.d/*.sh
3./etc/bashrc
2.我的配置
1.~/.bash_profile
2.~/.bashrc
7.shell和其它語言的不一樣之處
shell把空字符串和1相加運算會獲得1,並不會提示錯誤.其它語言空類型是不能和整數進行運算的
[root@centos7 ~]# a="" [root@centos7 ~]# b=a+1 [root@centos7 ~]# echo b b [root@centos7 ~]# echo $b a+1 [root@centos7 ~]# let b=a+1 [root@centos7 ~]# echo $b 1