0811:腳本練習

系統信息獲取腳本

1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。
[root@centos7 scripts]#cat systeminfo.sh 
#!/usr/bin/bash 
server_ip=`ifconfig | grep 'inet\b'  | grep -v '127.0.0.1' | tr -s ' '  | cut -d' '  -f3`
CPUmod=`lscpu | grep -i "model name:"`
Meninfo=`free -h | sed -n '2p' | tr -s ' ' | cut -d' ' -f2`
DISKinfo=`fdisk -l | sed -n '2p' | sed -r 's/.*[[:space:]]([0-9].*GB).*/\1/g'` 
echo 'hostname :'$(hostname)
echo 'hostIP:'${server_ip}
echo 'OS version:'$(cat /etc/redhat-release)
echo 'Kernel version:'$(uname -r)
echo 'CPU '$CPUmodecho 'Memory :'$Meninf
oecho 'Harddisk:'$DISKinfo
2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
[root@centos7 scripts]#cat backup.sh 
#!/usr/bin/env bash 
backdir="/root/etc$(date +%F)"
cp -a /etc/. $backdir && echo " backup $backdir  finished."
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值
[root@centos7 scripts]#cat disk.sh  
#!/usr/bin/env bash 
maxdisk=`df | grep '/dev/sd' | tr -s ' ' | sort -nr -t' ' -k5 | head -1 | cut -d' ' -f1`
maxused=`df | grep '/dev/sd' | tr -s ' ' | sort -nr -t' ' -k5 | head -1 | cut -d' ' -f5` 
echo '分區利用率最大值為:'$maxused
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排
[root@centos7 scripts]#cat links.sh 
#!/usr/bin/env bash 
echo -e "遠程主機連接統計為:\n\t連接數\t遠程主機IP"
netstat -nt | tr -s ' ' | cut -d' ' -f5 | tr -cs '0-9.' '\n' | egrep '([0-9]+.){3}[0-9]+' | sort | uniq -c | sort -nr | tr -s ' ' '\t'

計算腳本

5、寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和
[root@centos7 scripts]#cat sumid.sh 
#!/usr/bin/env bash

UID1=`sed -n '10p' /etc/passwd | cut -d: -f3`
UID2=`sed -n '20p' /etc/passwd | cut -d: -f3`
let Sumid=$UID1+$UID2 
echo -e "The 10 user ID is $UID1 ;\nthe 20 user ID is $UID2 ;\n\tthe sum of two users ID is $Sumid ."
6、寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和
[root@centos7 scripts]#cat sumspace.sh 
#!/usr/bin/env bash
File1=`grep '^$' $1 | wc -l`
File2=`grep '^$' $2 | wc -l`
let Sumspace=$File1+$File2 
echo "the sum of $1 and $2 spacelines is $Sumspace" 
unset File1
unset File2 
unset Sumspace
7、寫一個腳本/root/bin/sumfile.sh,統計/etc, /var,/usr目錄中共有多少個一級子目錄和文件
[root@centos7 scripts]#cat sumfile.sh 
#!/usr/bin/env bash
File1=`ls -A /etc | wc -l`
File2=`ls -A /var | wc -l`
File3=`ls -A /usr | wc -l` 
let Sumfile=$File1+$File2+$File3 
echo "the sum is $Sumfile " 
unset File1
unset File2
unset File3
unset Sumfile

測試大小練習:

8、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數
[root@centos7 bin]#cat argsnum.sh 
#!/bin/bash
linespace=$([[ $# -lt 1 ]] && echo "至少應該給一個參數" && exit || cat $1 | grep "^$" | wc -l)
echo "$1文件中,空白行數為$linespace。" 
unset $linespace
9、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”
[root@centos7 bin]#cat hostping.sh 
#!/bin/bash
ping -c1 -W1 $1 && echo "該IP地址可訪問" || echo "該IP地址不可訪問"
# ping命令的參數中,-c表示發送多少個包,-W表示等待多久(單位s)。

文件存在性練習:

10、chmod-rw /tmp/file1,編寫腳本/root/bin/per.sh判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫
[root@centos7 bin]#cat per.sh
#!/bin/bash
fileName=/tmp/file1
[ -r $fileName ] || [ -w $fileName ] && echo "file can be read or can be written " || echo "file can not be read or the file can not be written"
11、編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統。
#!/bin/bash
read -p " if you want regular users login press y, or press n " relog
case $relog in
[Yy]|[Yy][Ee][Ss]):
        [[ -f /etc/nologin ]] && rm -f /etc/nologin &> /dev/null && echo "regular users can login now" || echo "regular users can login, no change occure"
                ;;
[Nn]|[Nn][Oo]):
        [[ ! -f /etc/nologin ]] && echo > /etc/nologin || echo "file already exist"
        ;;
*)
        echo "please input right."esac

【易錯點】

  • case的格式:

case $var in
     case1)
            COMD
            ;;
     case2)
            COMD
            ;;
     *)
            OTHERS
esac
  • case1)后面,可以有冒號,也可以沒有冒號。也就是case1):也是正確的

  • [Yy] | [Yy][Ee][Ss]的表示

    [Yy]表示Y或者y 
    [Yy][Ee][Ss]很出彩

課后作業

12、寫一個腳本/root/bin/hostping.1.sh,接受一個主機的IPv4地址作為參數,先判斷是否合格IP,否,提示IP錯誤。
#!/bin/bash
red='\e[31;1m'
end='\e[0m'
green='\e[32;1m'
[[ -z $@ ]] && echo -e "$red 請輸入一個IPv4地址作為參數 $end" && exit 
[[ $# -gt 1 ]] && echo -e "$red 只能輸入一個參數作為IPv4地址 $end" && exit 
echo "$1"|grep -E '^([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){2}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$' &> /dev/null
var=$(echo $?)
[[ $var -ne 1 ]] || echo -e "$red 請輸入一個正確的IPv4地址 $end" 
[[ $var -eq 1 ]] && exit 
echo -e "$red 正在 ping "$1",請等待...$end"
ping -c2 -W2 "$1" &> /dev/null && echo -e "$green 主機"$1"可訪問 $end" || echo -e "$red 主機"$1"不可訪問 $end"

0811:腳本練習
【難點】

  • 判斷后的“echo輸出”和退出,不能夠連續,如果多次判斷,需要進行多次判斷ip,所以賦值變量,耗費cpu時鐘少一些

  • 注意IP判斷的正則表達式:^( [1-9] | [1-9][0-9] | 1[0-9]{2} | 2[0-4][0-9]] | 25[0-5]) . (([0-9] | [1-9][0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5]) . ) {2} ( [0-9] | [1-9][0-9] | 1[0-9]{2} | 2[0-4][0-9] | 25[0-5] ) $

  • IP地址判斷這里,可以替換為:^([1-255].([0-255].){2}[0-255]$,這樣更簡單好記一些

13、計算1+2+3……+100的值
#!/bin/bash
i=1sum=0
while [ $i -le 100 ] ;do
    sum=$(expr $sum + $i )
    let i++
done
echo $sum

0811:腳本練習
【易錯】

  • expr使用時,每個字符和變量之間需要有空格!

14、計算從A開始,到B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之。
#!/bin/bash#[[ $# -lt 2 ]] && echo "至少需要兩個不同的整數作為參數,第一個參數需要小于第二個參數" && exit[[ $1 =~ ^[[:digit:]]+$ ]][ $? -ne 0 ] && echo "第一個參數必須為整數" && exit[[ $2 =~ ^[[:digit:]]+$ ]][ $? -ne 0 ] && echo "第二個參數必須為整數" && exit[[ $1 -eq $2 ]] && echo "兩個整數不能相同" && exit[[ $1 -ge $2 ]] && echo "第一個參數需要小于第二個參數" && exitecho -n "$1到$2之間所有整數的和為"seq -s+ $1 $2 | bc

0811:腳本練習
【重點】

  • 使用[ [ ] ] 進行數字的匹配。[ [ 2= [[:digit:]]+2= [[:digit:]]+ ] ],這里如果使用[ [ 2= \b[[:digit:]]+\b]][[2= \b[[:digit:]]+\b]]是不能得到正確結果的,[[2 =~ \<[ [ : digit : ] ] + > ] ]也是不能有正確的結果

原創文章,作者:m20-吳清玲,如若轉載,請注明出處:http://www.www58058.com/37752

(0)
m20-吳清玲m20-吳清玲
上一篇 2016-08-22
下一篇 2016-08-22

相關推薦

  • 計算機簡介

    計算機的簡介 電子計算機(英語:computer),亦稱電腦,是一種利用「電子學」原理,根據一系列指令對數據進行處理的工具計算機種類繁多,但實際來看,計算機總體上是處理信息的工具。計算機在組成上形式不一,早期計算機的體積足有一間房屋的大小,而今天某些嵌入式計算機可能比一副「撲克牌」還小。當然,即使在今天依然有大量體積龐大的巨型計算機為特別的[科學]計算或面向…

    Linux干貨 2016-10-28
  • HAProxy基于Keepalived做高可用并簡單實現Web站點的動靜分離

    HAProxy簡介   HAProxy 是一個免費的,非??焖俸涂煽康慕鉀Q方案,提供 高可用性, 負載均衡和代理對TCP和HTTP的應用程序。它特別適用于非常大流量網站。多年來,它已成為標準開源的負載均衡,現在隨最主流的Linux發行版,并且通常默認的云平臺部署。 實驗描述 1、本實驗主要是在前端放置兩臺通過Keepalived做了高可用的HAProxy反向…

    Linux干貨 2016-04-16
  • N26-第六周作業-邢巖

    馬哥門徒-N26-邢巖      一直以來都用windows 的word來編輯文件,從今天開始,我又學會了新的編輯文件方式了,掩飾不住愉悅的心情!沒錯,就是vim 編輯器,一個神奇的編輯器!讓我來詳細介紹一下這個神器是如何使用的吧。     vim:vim其實就是(VI IMproved) vi增強…

    Linux干貨 2017-02-26
  • 文件權限管理–詳解

    進程安全上下文 進程安全上下文:     進程對文件訪問權限應用模型     進程的屬主與文件的屬主是否相同,如果相同則運行屬主權限     進程的屬主與文件的屬主不相同,對比屬組權限是否相同,相同則應用屬組權限   &…

    Linux干貨 2016-08-04
  • linux的基本命令

    先安裝一個軟件SecureFX8.0,作為偽終端來遠程控制虛擬機 1.hostname是虛擬機連接的IP地址 下面來介紹一些linux的基本命令 1. useradd xx 創建一個用戶   userdel xx 刪除一個用戶 不刪除用戶的文件   User -r xx  刪除一個用戶且刪除該用戶的…

    2017-07-14
  • bash 函數

        函數可以讓多條shell的命令組成語句塊,實現代碼重用和模塊化編程。讓我們在不用重復編寫一些腳本,下面讓我們來了解函數。 1,函數的簡介 函數在腳本中使用應先定義,聲明,再可以調用。 函數function 是由若干條shell 命令組成的語句塊,實現代碼重用和模塊化編程。 函數與shell 程序形式上是相似的,…

    Linux干貨 2016-08-24
欧美性久久久久