本文共 4819 字,大约阅读时间需要 16 分钟。
练习一1、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数 #!/bin/bash 2 #--------------------------------------- 3 #Filename: argsnum62.sh 4 #Revision: 1.0 5 #Language: English 6 #Author: root 7 #Date: 2017-11-24 8 #Description: script write 9 #------------------------------------------- 10 11 [ $# -lt 1 ] && echo "You shound give a parameter at least!" && exit 10 12 [ -e $1 ] && echo "The blankLine is `grep '^[[:space:]]*$' $1|wc -l`" || echo "No such f ile or directory!"2、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满diskNum=`df | grep "/dev/sd"|grep -o " [0-9]*% "|grep -o "[0-9]*"|sort -nr|head -1` 17 18 inodeNum=`df -i | grep "/dev/sd"|grep -o " [0-9]*% "|grep -o "[0-9]*"|sort -nr|head -1` 19 Sum=80 20 [ "$diskNum" -ge "$Sum" ]&& echo -e "磁盘空间占用率超过$Sum\a `wall 'The disk space will be full.' `"|| echo "磁盘利用率为:$diskNum,可以使用" 21 22 [ "$inodeNum" -ge "$Sum" ]&& echo -e "inode占用率超过$Sum %\a `wall 'The disk space will be full.' `"|| echo "inode利用率为:$inodeNum,可以使用"练习二1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小#!/bin/bash#================================#FileName : systeminfo.sh#Author : Jhon#Description : #DateTime : 2017-11-26#Version : V1.0#=================================hostname=`hostname`ipv4=`ifconfig ens33 |grep "inet " |egrep "[0-9]{1,3}(\.[0-9]{1,3}){3}" -o |head -n 1`os_version=`cat /etc/redhat-release`kernel_version=`uname -r`cpu_info=$(lscpu |grep "Model name:" | tr -s " " | cut -d: -f2)mem_size=`cat /proc/meminfo |grep "MemTotal" |cut -c 10- | grep "[^[:space:]].*" -o`disk_size=`df -h`echo "system info is===========================================hostname=$hostnameipv4=$ipv4kernel_version=$kernel_versioncpu_info=$cpu_infomem_size=$mem_sizedisk_size=$disk_size"2、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中(关键代码)cp -a /etc/ /root/etc$(date "+%F") 3、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序(关键代码)ss -tan |grep "^ESTAB" |egrep "[0-9]{1,3}(\.[0-9]{1,3}){3}:[0-9]{1,6}[[:space:]]*$" -o |cut -d ":" -f 1 |sort |uniq -c | sort -r -n -t " " -k1练习三1、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中的第10个用户和第20用户的ID之和(关键代码)uid_10=$(cat /etc/passwd |head -n 10 |tail -n 1 |cut -d ":" -f 3)uid_20=$(cat /etc/passwd |head -n 20 |tail -n 1 |cut -d ":" -f 3)sum_id=$[uid_10+uid_20]echo $sum_id2、编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和(关键代码)file1_space_line=`cat $1 |grep "^[[:space:]]*$" |wc -l`file2_space_line=`cat $2 |grep "^[[:space:]]*$" |wc -l`sum_space_line=$[file1_space_line+file2_space_line]echo $sum_space_line3、编写脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件(关键代码)let sumfiles=$[`ls -A -1 /etc |wc -l`]+$[`ls -A -1 /usr | wc -l`]+$[`ls -A -1 /var |wc -l`]echo $sumfiles练习四1、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数"argsnum64.sh" 2L, 180C [ $# -lt 1 ] && echo "you must give one arg at lease!" && exit 4[ -e $1 ] && echo "spacenums ---------- " $(grep '^[[:space:]]*$' $1|wc -l)|| echo "$1 is not file or directory"2、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满diskNum=$(df | grep '/dev/sd*' | grep -o '[0-9]*%' | cut -d "%" -f1 | sort -rn | head -n1)inodeNum=$(df -i| grep '/dev/sd*' | grep -o '[0-9]*%' | cut -d "%" -f1 | sort -rn | head -n1)[ "$diskNum" -gt 10 ] && echo -e "磁盘空间利用率超过 10%\n" $(wall 'The disk space is full') || echo "磁盘利用率为: $diskNum,可以使用"[ "$inodeNum" -gt 10 ] && echo -e "磁盘空间利用率超过 10%\n" $(wall 'The disk space is full') || echo "inode利用率为: $inodeNum ,可以使用" 类似的命令进行组合disk = $((df -I /dev/sd* ; df -I /dev/sd* ) | egrep -o "[0-9]+" 省略……..1、 编写一个脚本创建文件时自动创建文件名、作者、日期、描述等注释信息cat <<_EOF_ > $1#!/bin/bash#================================#FileName : $1#Author : Jhon#Description : #DateTime : $(date "+%F")#Version : V1.0#=================================_EOF_chmod +x $1vim + $1 #打开文件定位到行尾鸡兔同笼,已知鸡和兔数量,计算出兔和鸡分别有多少只?鸡 x x + y =head兔 y 2x + 4y = foot2x = foot – 4*(head - x) 整理 x = (4*head – foot)/2 read -p "please input head num : " headread -p "please input foot num : " footji=$[(4*head-foot)/2]tu=$[head-ji]echo " ji num : $ji "echo " tu num : $tu "提示用户输入yes或no进行确认自己编写:read -p "Do you agree ?yes or no " ANS yn=$(echo "$ANS" | tr "[:lower:]" "[:upper:]")[ "$yn" == Y -o "$yn" == YES ] && echo "you input is YES" && exit 10 [ "$yn" == N -o "$yn" == NO ] && echo "you input is NO" && exit 11 || echo "you input is wrong" && exit 14注意正则表达式中用或关系分别需行首行尾锚定参考编写:ans=noo;[[ "$ans" =~ ^[Yy]([Ee][Ss])?$|^[Nn][Oo]?$ ]] && echo true [[ "$ans" =~ ^[Yy]([Ee][Ss])?$ ]]ans=noo;[[ "$ans" =~ ^[Nn][Oo]?$ ]]
转载于:https://blog.51cto.com/11034229/2044507