腳本練習:
1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。
#!/bin/bash #功能:編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小 Zhujixinxi=`hostname` Ipv4=`ifconfig | sed -n '2p'|sed -r 's@.*addr:(.*) .*B.*@\1@'` Banben=`cat /etc/redhat-release` Neihe=`uname -r` Cpu=`lscpu | sed -n '/^Model name.*/p'|sed -r 's@.*[[:space:]]{3}+(.*$)@\1@'` Neicun=`free -h |tr -s " "|cut -d " " -f2 | sed -n '2p'` Yingpan=`fdisk -l |sed -n '2p'| sed -r 's@.* (.*) GB.*@\1@'` echo 'hostname :' $Zhujixinxi echo 'IPv4:' $Ipv4 echo 'OS version :' $Banben echo 'Kernel version :' $Neihe echo 'CPU :' $Cpu echo 'memory:' $Neicun echo "harddisk: $Yingpan"
[root@qzx bin]# vim systeminfo.sh [root@qzx bin]# ./systeminfo.sh hostname : qzx.centos6.8 IPv4: 10.1.253.75 OS version : CentOS release 6.8 (Final) Kernel version : 2.6.32-642.el6.x86_64 CPU : Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz memory: 1.8G
2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
#!/bin/bash #實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中 echo '開始備份/etc。。。。。。。' cp -a /etc /root/${date +%F} echo '備份結束'
[root@qzx bin]# bash backup.sh 開始備份/etc。。。。。。。 備份結束 [root@qzx bin]# ls /root/ 2016-08-11 Desktop hehe Pictures user.txt
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值、
#!/bin/bash #顯示當前硬盤分區中空間利用率最大的值 max=`df |tr -s ' ' '%'|cut -d '%' -f5|sort -n |tail -1` echo "當前硬盤分區中空間利用率最大的值為:$max"
[root@qzx bin]# ./disk.sh 當前硬盤分區中空間利用率最大的值為:52
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序
#!/bin/bash #顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序 links=`netstat -nt |tr -s ' ' |tail -n +3 | cut -d " " -f5 | sed -r 's@(.*):.*@\1@'|sort |uniq -c` echo "$links"
[root@qzx bin]# bash link.sh 2 10.1.250.28
5、寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的ID之和
#!/bin/bash #/etc/passwd文件中的第10個用戶和第20用戶的ID之和 sumid=`sed -n '10p;20p' /etc/passwd|cut -d : -f 3 |tr '\n' '+' | sed -r 's@(.*)\+@\1\n@'| bc` echo "/etc/passwd文件中的第10個用戶和第20用戶的ID之和:$sumid"
[root@qzx bin]# bash sumid.sh /etc/passwd文件中的第10個用戶和第20用戶的ID之和:80
6、寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和
##!/bin/bash #傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和 space1=`grep '^$' $1 | wc -l` space2=`grep '^$' $2 | wc -l` let Sumspace=$space1+$space2 echo "兩個文件中所有空白行之和: $Sumspace"
[root@qzx bin]# bash sumspace.sh /etc/rc.d/init.d/functions ../.bash_profile 兩個文件中所有空白行之和: 109
6、寫一個腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件
#!/bin/bash #統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件 etcnum=`ls -A -1 /etc/ |wc -l` varnum=`ls -A -1 /var/ |wc -l` usernum=`ls -A -1 /usr/ |wc -l` let sum=$etcnum+$varnum+$usernum echo "/etc, /var, /usr目錄中共有多少個一級子目錄和文件:$sum"
[root@qzx bin]# bash sumfile.sh /etc, /var, /usr目錄中共有多少個一級子目錄和文件:299
7、寫一個腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小于1,則顯示第一個參數所指向的文件中的空白行數
#!/bin/bash #接受一個文件路徑作為參數;如果參數個數小于1,則提示用戶“至少應該給一個參數”,并立即退出;如果參數個數不小>于1,則顯示第一個參數所指向的文件中的空白行數 [[ $# -lt 1 ]] && echo "至少應該輸入一個參數" || (grep '^$' $1 | wc -l)
[root@qzx bin]# bash argsnum.sh /etc/rc.d/init.d/functions 105 [root@qzx bin]# bash argsnum.sh 至少應該輸入一個參數
8、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”
#!/bin/bash #接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通, 則提示用戶“該IP地址不可訪問” ping -w1 -c1 "$1" &>/dev/null Pingchenggong=`echo $?` [[ $Pingchenggong -eq 0 ]] && (echo "該IP地址可訪問") || (echo "該IP地址不可訪問")
[root@qzx bin]# bash hostping.sh 10.1.253.1 該IP地址可訪問 [root@qzx bin]# bash hostping.sh 10.1.253.155 該IP地址不可訪問
9、chmod -rw /tmp/file1,編寫腳本/root/bin/per.sh,判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫
#!/bin/bash #判斷當前用戶對/tmp/fiile1文件是否不可讀且不可寫 (([ ! -r /tmp/flie1 ]) && ([ ! -w /tmp/file1 ])) && (echo "此用戶對/tmp/file1文件不可讀寫" )
[qzx@qzx bin]$ /tmp/per.sh 此用戶對/tmp/file1文件不可讀寫 [qzx@qzx bin]$ ll /tmp/file1 -rw-rw----. 1 root root 5 Aug 12 10:57 /tmp/file1
10、編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統。
#!/bin/bash #實現禁止和允許普通用戶登錄系統。 [ -f /etc/nologin ] && (echo "普通用戶已不能登錄")|| (touch /etc/nologin)
11、
寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,先判斷是否合格IP,否,提示IP格式不合法并退出,是,
測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問”
#!/bin/bash #接受一個主機的IPv4地址做為參數,先判斷是否合格IP,否,提示IP格式不合法并退出,是,測試是否可連通。如果能ping通,則提示>用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問” echo $1 | egrep -o '([0-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]))\.([0-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]))\>'&>/dev/null [ $? -ne 0 ] && echo "這是個不合格的IP" && exit 213 ping -w1 -c1 "$1" &>/dev/null && (echo "該IP地址可訪問") || (echo "該IP無法訪問")
[root@qzx bin]# bash pinghost.sh 10.1.0.755 這是個不合格的IP [root@qzx bin]# bash pinghost.sh 10.1.0.255 該IP無法訪問 [root@qzx bin]# bash pinghost.sh 10.1.0.2 該IP無法訪問 [root@qzx bin]# bash pinghost.sh 10.1.0.1 該IP地址可訪問
12、計算1+2+3+…+100的值
[root@qzx ~]# seq 1 100 |tr '\n' '+' | egrep -o '.*[^+]' |bc 5050
13、計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之
#!/bin/bash #計算從腳本第一參數A開始,到第二個參數B的所有數字的總和,判斷B是否大于A,否提示錯誤并退出,是則計算之 [ $2 -gt $1 ] && (seq $1 $2 |tr '\n' '+' | egrep -o '.*[^+]' |bc) || (echo "輸入的數字不正確")
[root@qzx bin]# bash numA_B.sh 100 1 輸入的數字不正確 [root@qzx bin]# bash numA_B.sh 1 100 5050
原創文章,作者:qzx,如若轉載,請注明出處:http://www.www58058.com/34073
作業完成的很好,但是總結沒寫,這是需要改進的地方