练习一
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=$hostname
ipv4=$ipv4
kernel_version=$kernel_version
cpu_info=$cpu_info
mem_size=$mem_size
disk_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_id
2、编写脚本/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_line
3、编写脚本/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 $1
vim + $1 #打开文件定位到行尾
鸡兔同笼,已知鸡和兔数量,计算出兔和鸡分别有多少只?
鸡 x x + y =head
兔 y 2x + 4y = foot
2x = foot – 4*(head - x) 整理 x = (4*head – foot)/2
read -p "please input head num : " head
read -p "please input foot num : " foot
ji=$[(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脚本编程基础
原创
©著作权归作者所有:来自51CTO博客作者51tanxiaojun的原创作品,请联系作者获取转载授权,否则将追究法律责任
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
shell脚本基础编程
编程
脚本基础编程 -
Linux Shell脚本编程基础
变量名称可以由字母、数字和下划线组成,但是不能以数字开头,变量中间不能有空格ly
linux bash 运维 服务器 开发语言 -
算法及shell脚本编程基础
算法与或非,高级语言,shell脚本代码,脚本运行方法
算法 高级语言 或非