例67 監控cpu使用率
要求:寫乙個監控伺服器cpu使用率監控監本
思路:用top -bn1命令,取當前空閒cpu百分比值(只取整數部分),然後用100去減這個數值
#!/bin/bash
while :
docpu_i=`top -bn1 | grep 'cpu(s):'| sed 's/^%//'|awk -f ' +|%' ''`
cpu_u=`echo 100-$cpu_i|bc`
if [ $cpu_u -gt 90 ]
then
echo "cpu使用率偏高"
python mail.py [email protected] "cpu使用率過高" "`top -bn1`"
fisleep 60
done
例68 列印子程序
要求:給出乙個程序的pid,列印出該程序下面的子程序以及子程序下面的所有程序(只需要考慮程序的子程序,再往深層次的則不考慮)
要點:ps -elf結果中ppid那一列為父程序pid
#!/bin/bash
ps -elf > /tmp/pid.txt
read -p "please input a pid: " p
if [ -z "$p" ]
then
echo "你沒有輸入任何乙個pid,請輸入乙個pid"
exit
fiif ! grep -qw "$p" /tmp/pid.txt
then
echo "你輸入的pid不存在"
exit
figet_cpid()
p1=$1
ps -elf | awk -v p2=$p1 '$5==p2 ' > /tmp/$p1.txt
n=`wc -l /tmp/$p1.txt|awk ''`
if [ $n -eq 0 ]
then
echo "程序$1下沒有子程序"
else
echo "程序$1下的子程序是:"
cat /tmp/$p1.txt
figet_cpid $p
for c_p in `cat /tmp/$p.txt`
doget_cpid $c_p
done
例69 lamp增加專案
需求背景:伺服器上,跑的lamp環境,上面有很多客戶的專案,每個專案就是乙個**。由於客戶在不斷的增加,每次增加乙個客戶,就需要配置相應的mysql、ftp、以及httpd。這種工作重複性非常強,所以用指令碼實現非常合適。mysql增加的是對應客戶專案的資料庫、使用者、密碼。ftp增加的是對應專案的使用者、密碼(使用vsftpd,虛擬使用者模式),httpd就是要增加虛擬主機配置段
要點:要想理解此題,首先要搞清楚增加mysql庫和使用者、增加httpd虛擬主機、增加ftp使用者的命令,只要能在命令列搞定,那麼在指令碼中就沒有問題。
例70 簡易計算器
題目要求
用shell寫乙個簡單的計算機,可以實現加減乘除運算,假如指令碼名字為1.sh執行示例 ./1.sh 1+2
要點:1.指令碼有三個引數,所以第一要判斷使用者輸入的引數個數是否符合要求
2.第乙個第三個三處是數字,可以是小數,但不能是負數,第二個引數只能是+、-、*
/,如果是其他也要報錯
#!/bin/bash
if [ $# -ne 3 ]
then
echo "你給的引數錯誤"
exit
fiif_number()
n1=`echo $1|sed 's/[0-9.]//g'`
if [ -n "$n1" ]
then
echo "$1不是數字"
exit
fiif echo $1|grep -q '^\.'
then
echo "$1引數不合法"
exit
fiif_number $1
if_number $3
case $2 in
echo "$1+$3"|bc
echo "$1-$3"|bc
echo "$1*$3"|bc
echo "scale=2;$1/$3"|bc
echo "你給出的格式不對,第二個引數只能是+,—,*,/"
exit
esac
例71 判斷檔案並計算單詞
要求:判斷所給目錄內那些耳機檔案目錄下沒有text.txt檔案
有text.txt檔案的二級目錄,計算出該test.txt檔案裡面所給出單詞的次數
假如指令碼名字為1.sh 執行指令碼的格式為./1.sh 123 root,其中123為目錄名字 ,而root為要計算數量的單詞
要點:[-f file]判斷是否有某個檔案
grep -cw 獲取單詞個數
#!/bin/bash
if [ $# -ne 2 ]
then
echo "請提供兩個引數,第乙個引數是目錄名字,第二個引數是單詞"
exit
ficd $1
for f in `ls .`
doif [ -d $f ]
then
if [ -f $f/test.txt ]
then
n=`grep -cw "$2" $f/test.txt`
echo "$1/$f目錄下面有test.txt,該test.txt裡面的有$n個$2"
fifi
done
例72 列印正方形
要求:互動式指令碼,根據提示,需要使用者輸入乙個數字作為引數,最終列印出乙個正方形。在這裡我們提供乙個linux下面的特殊字元□,可以直接列印出來。
例子如果使用者輸入數字為5,則最終顯示效果為
要點:echo -n 不換行
#!/bin/bash
while :
doread -p "please input a nuber : " n
n1=`echo $n|sed 's/[0-9]//g'`
if [ -n "$n1" ]
then
echo "$n is not a nuber"
continue
else
break
fidone
for i in `seq 1 $n`
dofor j in `seq 1 $n`
doecho -n "□"
done
echo
done
shell訓練計畫30天之第二十四天
例61 查詢檔案差異 要求 有兩個檔案a.txt和b.txt,需求是吧a.txt中有的但b.txt中沒有的行找出來,並寫入到c.txt,然後計算出c.txt檔案的行數 要點 可以使用while迴圈遍歷a.txt,逐行進行匹配,如果這一行在b.txt中沒有就直接重定向到c.txt中即可 bin bas...
shell訓練計畫30天之第六天
一 什麼是shell 1.shell是一種程式語言 2.shell可以使用邏輯判斷和迴圈等語法 3.shell支援自定義函式 4.shell是系統命令的集合 5.shell指令碼可以實現自動化運維,可以大大增加運維的效率 6.shell其實就是把系統的命令寫進檔案中,有點類似於windows的批處理...
shell訓練計畫30天之第一天
一 什麼是shell 1.是命令直譯器 2.支援特定的語法 邏輯判斷 迴圈 3.每個使用者可以有自己特定的shell 4.centos7預設shell為bash bourne agin shell 5.其他的shell zsh ksh 二 命令歷史 1.按向上方向鍵檢視歷史命令 2.歷史命令檔案存在...