1. 寫一個腳本/root/bin/argsnum.sh 用戶輸入一個文件路徑并查找文件中空白行的個數
,如果用戶沒有輸入路徑則自動退出
實驗結果如下:
如果不輸入任何路徑程序會自動退出:實驗結果如下:
用其他方法驗證是不是有兩行空行:
(個人總結):
1. read 命令,如果用 -p 來做提示信息,則不支持\n換行,這時需要用echo命令,echo它 有自動換行,同時也支持\n -t timeout定義多長時間超時默認計時單位是分鐘。-n 定義輸入的的字符數,超出輸入后會,read會自動退出, -s 隱藏輸入時的字符,其實輸入有的只是設置成了和背景色一樣的的前景色。
2. [[ -z “STRING”]] 字符串是否為空,空則為真. [[ -n “STRING” ]]字符串是否為空,不空則為真——-注意方括號里面的兩邊是有空格的
3. 用grep -c 做統計 grep -c “^$” $fpath 和grep “^$” $fpath |wc -l
2、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名, IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值
其他實現方式df | tr -s ' ' | cut -d' ' -f5 |sed 1d |sort -nr |head -1 但是通用性比較差
(個人總結):
靈活應用tr 命令中的tr -s ‘ ’刪除重復的空格。
應用sed #d去刪除某一行
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址和連接數,并按連接數從大到小排序
netstat -nt |cut -d: -f1|tr -s ' '|grep "[0-9]" |cut -d' ' -f4
5、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中
#!/bin/bash
time=$(date '+%F')
cp -r /etc/ /root/etc$time
6、 寫一個腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第20用戶的 之和
7、 寫一個腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和
8、 /root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級子目錄和文件
法一:
法二:
(個人總結):
比較靈活的應用位置變量來接受用戶動態傳過來的三個值,且使用了echo -en 進行取消自動換行和按需手動換行
9、寫一個腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可ping通,則提示用戶“該IP地址不可訪問
(個人總結)
此練習中用到了-c -W兩個選項,-c 是定義ping的次數,-W是定義ping的時間,而 &> /dec/null 是重定向到一個空設備中而不用顯示出來
10、指定文件做為參數,判斷文件是否為.sh后綴,如果是,添加x權限
#!/bin/bash
echo $1 | grep .*\.sh$ |chmod +x $1 && echo 權限x已經附加 || echo 你輸入的目錄不是.sh
11、 判斷硬盤的每個分區空間和inode的利用率是否大于80,如果是,發郵件通知root磁 盤滿
[ `df -i |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1|sort -nr|head -1` -ge 80 ] || [ `df |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1 |sort -nr|head -1` -gt 80 ] && echo 磁盤將爆滿請檢查磁盤Inode或容量
[ `df -i |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1|sort -nr|head -1` -ge 8 ] || [ `df |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1 |sort -nr|head -1` -gt 80 ] && echo 磁盤將爆滿請檢查磁盤Inode或容量
測試二、把磁盤條件中80改成8提示報警
12、判斷輸入的IP是否為合法IP
#!/bin/bash
echo 請輸入IP地址
read ips
echo "$ips" |egrep '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[ 0-5])$' && echo 你輸入的地址是合法地址||echo 你輸入的IP地址有錯
13、計算1+2+3+…+100
14、輸入起始值A和最后值B,計算從A+(A+1)…+(B-1)+B的總和
#!/bin/bash
echo 請輸入要A B
read -p "你輸入的A值為" A
read -p "你輸入的B值為" B
[ $A -ge $B ]&&exit || echo `seq $A $B` |tr ' ' + |bc
(個人總結):用在echo中調用seq命令能夠靈活的橫行打印
原創文章,作者:yywan1314,如若轉載,請注明出處:http://www.www58058.com/33685
通過練習,總結對shell腳本的認識,是個很好的方式,shell腳本的變量也需要作者能有一個完整的概述哦