shell腳本練習後續可能繼續追加~~~
#!/bin/bash echo "hostname: `hostname`" echo "ipv4 addr: `ifconfig |egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>" | head -1`" echo "ipv4 addr: `ifconfig ens33 | grep "inet " | tr -s " " | awk ‘{print $2}‘`" echo "OS version: `cat /etc/redhat-release`" echo "kernel version: `uname -r`" echo "CPU version: `lscpu | grep "Model name" | tr -s " " | cut -d: -f2`" echo "memery max_size: `cat /proc/meminfo | head -1 | cut -d: -f2`" echo "disk max_size: `fdisk -l | head -2 | tail -1| cut -d" " -f3,4`"
2、編寫腳本/root/bin/backup.sh,可實現將/etc/目錄備份到 /root/etcYYYY-mm-dd中
#!/bin/bash
echo "copy will start...."
sleep 3
cp -av /etc /root/etc`date +%F`
echo "copy finished "
3、編寫腳本/root/bin/disk.sh,顯示當前硬盤分區中空間利用率最大的值
#!/bin/bash echo "the max value is : `df | grep "/dev/sd*" | tr -s " " "%" | cut -d% -f5 | sort -nr | head -1`"
4、編寫腳本/root/bin/links.sh,顯示正連接本主機的每個遠程主機的IPv4地址 和連接數,並按連接數從大到小排序
#!/bin/bash
echo "the connecting hosts: ` netstat -tun | tr -s ‘ ‘ | awk ‘{print $5}‘ | grep -v "[a-zA-Z]" | uniq -c | sort -nr `"
5、編寫腳本/root/bin/sumid.sh,計算/etc/passwd文件中的第10個用戶和第 20用戶的ID之和
#!/bin/bash Id1=`cat /etc/passwd | sed -n "10 p" | awk -F: ‘{print $3}‘` Id2=`cat /etc/passwd | sed -n "20 p" | awk -F: ‘{print $3}‘` echo "two user‘s id sum=$[$Id1+$Id2]"
6、編寫腳本/root/bin/sumspace.sh,傳遞兩個文件路徑作為參數給腳本,計算這兩個文件中所有空白行之和
#!/bin/bash
read -p "please input file name no.1: " first_name
read -p "please input file name no.2: " second_name****
f1=`cat $first_name | grep "^[[:space:]]*$" | wc -l`
f2=`cat $second_name | grep "^[[:space:]]*$" | wc -l`
echo "the two file space line sum=$[$f1+$f2]"
7、編寫腳本/root/bin/sumfile.sh,統計/etc, /var, /usr目錄中共有多少個一級 子目錄和文件
#!/bin/bash
sum1=`ls -A /etc | wc -l`
sum2=`ls -A /var | wc -l`
sum3=`ls -A /usr | wc -l`
echo "/etc /var /usr file sum=$[$sum1+$sum2+$sum3]"
8、編寫腳本/root/bin/argsnum.sh,接受一個文件路徑作為參數;如果參數 個數小於9,則提示用戶“至少應該給一個參數”,並立即退出;如果參數個數 不小於1,則顯示第一個參數所指向的文件中的空白行數
#!/bin/bash
# 接收一個文件路徑作為參數,如果參數個數小於1,則提示用戶至少應該給一個參數,並且立即退出,如果參數
#個數不小於1 則顯示第一個參數所指向的文件中的空白行數
if (($#<"1"))
then
echo "至少應該給一個參數"
else
echo "space line: `cat $1 | grep "^[[:space:]]*$" | wc -l`"
fi
9、編寫腳本/root/bin/hostping.sh,接受一個主機的IPv4地址做為參數,測 試是否可連通。如果能ping通,則提示用戶“該IP地址可訪問”;如果不可 ping通,則提示用戶“該IP地址不可訪問”
#!/bin/bash
ping -c1 $1 &>/dev/null
if (($?<"1"))
then
echo "this host is up"
else
echo "can not arrived"
fi
10、編寫腳本/root/bin/checkdisk.sh,檢查磁盤分區空間和inode使用率,如 果超過80%,就發廣播警告空間將滿
#!/bin/bash
b_max=`df | grep -E "^/dev/sd*" | tr -s " " "%" | cut -d% -f5 | sort -nr |head -1`
i_max=`df -i | grep -E "^/dev/sd*" | tr -s " " "%" | cut -d% -f5 | sort -nr |head -1`
[ $b_max -gt 80 -o $i_max -gt 80 ] && wall hard disk full || echo "not warning"
unset b_max
unset i_max
將數值故意調低之後
11、編寫腳本/bin/per.sh,判斷當前用戶對指定參數文件,是否不可讀並且不可寫
#!/bin/bash
read -p "please input file name: " fn
if [ ! -r $fn -a ! -w $fn ]
then
echo "`whoami` can not read and write "
else
echo "`whoami` can read and write file"
fi
12、編寫腳本/root/bin/excute.sh ,判斷參數文件是否為sh後綴的普通文件,如果是且非空,添加所有人可執行權限,否則提示用戶非腳本文件
#!/bin/bash
read -p "please input filename: " fn
if [[ $fn =~ ..*\.sh$ ]]
then
if [[ -s $fn && -f $fn ]]
then
chmod a+x $fn
echo "OK"
else
echo "file is not suit"
exit
fi
else
echo "please input suit file "
exit
fi
1和1.sh是空文件 per.sh是之前練習的shell腳本
13、編寫腳本/root/bin/nologin.sh和login.sh,實現禁止和充許普通用戶登錄系統
#!/binbash
if [ -e /etc/nologin ]
then
echo "stop user loading "
else
touch /etc/nologin
echo "stop user load"
fi
#!/bin/bash
if [ -e /etc/nologin ]
then
rm -rf /etc/nologin
echo "user can load"
else
echo "user can load"
fi
shell腳本練習後續可能繼續追加~~~