shell訓練計畫30天之第二十五天

2021-09-27 04:09:54 字數 4256 閱讀 1584

例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.歷史命令檔案存在...