1、什么是shell脚本
shell script是放在文本文件中的一串shell和操作系统命令,让使用者很容易地就能够一个操作执行多个命令,并可以重复使用。
2、如何创建shell脚本
-
第一步:创建一个文本,最好以
.sh
为后缀,方便区分其他普通文本。- shell脚本第一行需要指定使用的shell,我们称之为shebang机制,其格式为
#!/bin/bash
- 在声明使用的shell后,还可以用#添加shell脚本的注释,注释内容不会被执行,目的是方便使用者理解脚本
如:
#!/bin/bash
#Author:Luo
#date:2017-06-08
#version:2.0
#该脚本用于计算/etc/passwd文件中的第n个用户和第m用户的ID之和
添加完注释后,就可以在文件的每一行中输入命令,然后加一个回车符。shell编程是属于过程式、解释执行语言。因此,按照你的思路按顺序写上脚本要执行的命令即可。
-
第二步:运行脚本
相信到这里你的脚本已经写完了,那么接下来要做的就是,运行脚本了,过程如下:- 给脚本文件添加执行权限
- 运行脚本,三种方法:
- 将shell脚本文件所处的目录添加到PATH环境变量中
- 在命令行提示符中用绝对或相对文件路径来引用shell脚本文件。
- 在命令行命令行中直接用bash 调用脚本
3、脚本例子
#!/bin/bash
#Author:Luo
#date:2017-06-06
#version:2.0
#计算/etc/passwd文件中的第n个用户和第m用户的ID之和
[ $# -ne 2 ]&&echo "usage:idsum.sh arg1 arg2"&&exit [2]
ID1=`getent passwd|head -n $1|tail -n 1|cut -d: -f3`
ID2=`getent passwd|head -n $2|tail -n 1|cut -d: -f3`
echo ID1=$ID1
echo ID2=$ID2
sum=$[ID1+ID2]
echo sum=$sum
exit
#!/bin/bash
#Author:Luo
#date:2017-06-06
#version:2.1
#传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
Space1=`grep ^[[:space:]]*$ $1|uniq -c`
Space2=`grep ^[[:space:]]*$ $2|uniq -c`
echo Space1=$Space1
echo Soace2=$Space2
Spacesum=$[Space1+Space2]
echo Spacesum=$Spacesum
#!/bin/bash
#Author:Luo
#date:2017-06-06
#version:2.
#统计/etc, /var, /usr目录中共有多少个一级子目录和文件
[ $# -ne 3 ] && echo "usage:idsum.sh file1 file2 file3" && exit [2]
dir1=`ls -l $1|grep -v total |wc -l`
dir2=`ls -l $2|grep -v total |wc -l`
dir3=`ls -l $3|grep -v total |wc -l`
echo num=$dir1
echo num=$dir2
echo num=$dir3
sum=$[dir1+dir2+dir3-3]
echo sum=$sum
#!/bin/bash
#Author:Luo
#date:2017-06-06
#version:2.0
#接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;
#如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数
[ "$#" -lt 1 ]&&echo "至少应该给一个参数"&&exit
grep "^[[:space:]]*$" $1|wc -l
exit
#!/bin/bash
#Author:Luo
#date:2017-06-06
#version:2.0
#接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问
[ "$#" -ne 1 ]&&echo "请输入一个ip地址"&&exit
ping -c 1 $1 &> /dev/null && echo "该ip地址可以访问"||echo "该ip地址不可访问"
exit
#!/bin/bash
#Author:Luo
#date:2017-06-06
#version:2.0
#检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
i=`df|grep "^/dev/sda"|tr -s " " :|cut -d":" -f5|sort -nr|wc -l`
[ $i -ge 1 ] && usage=`df|grep "^/dev/sda"|tr -s " " :|cut -d":" -f5|cut -d "%" -f1 |sort -n|tail -n 1`
[ $usage -lt 80 ] &&echo "磁盘空间最高使用率:$usage% 正常"||echo "磁盘空间将满"
[ $i -ge 1 ] && iusage=`df -i |grep "^/dev/sda"|tr -s " " :|cut -d":" -f5|cut -d "%" -f1 |sort -n|tail -n 1`
[ $usage -lt 80 ] &&echo "inode最高使用率:$iusage% 正常"||echo "inode将满"