博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本编程基础
阅读量:5963 次
发布时间:2019-06-19

本文共 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]?$ ]]

shell脚本编程基础

shell脚本编程基础

转载于:https://blog.51cto.com/11034229/2044507

你可能感兴趣的文章
查询某个命令需要用yum安装哪个包才有
查看>>
网络协议
查看>>
Storm环境搭建
查看>>
我的友情链接
查看>>
初试Jekyll----像个GEEK一般写博客(1)
查看>>
Linux运维实战之用Eclipse写python程序
查看>>
pycharm windows 远程调试 ubuntu虚拟机python 项目
查看>>
python随机生成字符串学习
查看>>
打印机的安装
查看>>
Nginx 完整配置说明
查看>>
认识Linux
查看>>
linux 下查看某个端口是否被占用
查看>>
win7 win10 win8系统文件夹重命名要刷新下文件名才会改变,桌面也不会自动刷新...
查看>>
深入研究Java类加载机制
查看>>
jsp 编码问题
查看>>
Rust 1.2.0 翻译官网总结(一)
查看>>
从 HTTP 到 HTTPS 再到 HSTS
查看>>
自定义IIS Banner信息
查看>>
U盘安装linux发行版
查看>>
Android中OrmLite持久化
查看>>