shell脚本的基本结构:
shell脚本示例:
1 | [root@localhost ~]# cd /usr/local/sbin/ |
shell脚本用注意事项:
Shell脚本通常都是以.sh 为后缀名的**,这个并不是说不带.sh这个脚本就不能执行,只是大家的一个习惯而已。所以,遇见.sh结尾的文件通常都是脚本。
shell脚本中第一行要以 “#! /bin/bash” 开头,它代表的意思是,该文件使用的是bash语法。如果不设置该行,虽然shell脚本也可以执行,但是这不符合规范。
# 表示注释。后面跟一些该脚本的相关注释内容以及作者和创建日期或者版本等等。为了方便管理,写注释是非常必要的。
shell脚本执行方法:
sh shell.sh
另外使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题:
./first.sh 该方法通常需要更改文件权限。
chomod +x shell.sh
1 | [root@localhost sbin]# sh -x first.sh |
命令date:
1 | [root@localhost sbin]# date +"%Y-%m-%d %H:%M:%S" |
date在脚本中最常用的几个用法:
data +%Y
以四位数字格式打印年份
date +%y
以两位数字格式打印年份
date +%m
月份
date +%d
日期
date +%H
小时
date +%M
分钟
date +%S
秒
date +%w
星期,如果结果显示0 则表示周日
有时在脚本中会用到一天前的日期:
1 | [root@localhost sbin]# date -d "-1 day" +%d |
或者一小时前:
1 | [root@localhost sbin]# date -d "-1 hour" +%H |
甚至1分钟前:
1 | [root@localhost sbin]# date -d "-1 min" +%M |
shell脚本中的变量:
变量就是和其他编程语言中的变量一样,为了简化和使代码更容易维护。
使用变量的脚本示例:
1 | [root@localhost sbin]# cat variable.sh |
1 | [root@localhost sbin]# ./variable.sh |
脚本中使用了反引号 “ ` “ , 反引号的作用:在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。
d’ 和 ‘d1’ 在脚本中作为变量出现,定义变量的格式为
变量名=变量的值
当在脚本中引用变量时需要加上 ‘$’ 符号,引用变量的符号。
使用shell计算两个数的和:
1 | [root@localhost sbin]# cat sum.sh |
Shell脚本还可以和用户交互:
1 | [root@localhost sbin]# cat read.sh |
shell的预设变量:
shell中的预设变量$0,代表脚本本身的名字。
shell脚本的逻辑判断:
在shell中的判断的基本语法为:
1 | if 判断语句一 ; then |
使用示例:
1 | [root@localhost sbin]# cat if.sh |
在判断数值大小除了可以用 (( )) 的形式外,还可以使用 [ ] 但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。
1 | [root@localhost sbin]# a=10; if [ $a -lt 5 ]; then echo ok; fi |
shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为:
if [ -e filename ] ; then
1 | root@localhost sbin]# if [ -f /root/test.txt ]; then echo ok; fi |
case的使用方法:
1 | case 变量 in |
面的结构中,不限制value的个数, *
则代表除了上面的value外的其他值。
判断输入数值是奇数或者偶数的脚本:
1 | [root@localhost sbin]# cat case.sh |
case脚本常用于编写系统服务的启动脚本,例如/etc/init.d/iptables中就用到了。
shell脚本中的循环:
for循环的基本结构:
1 | for 变量名 in 循环的条件; do |
for循环示例:
1 | [root@localhost sbin]# cat for.sh |
while循环:
1 | while 条件; do |
while使用示例:
1 | [hadoop@localhost ~]$ cat while.sh |
另外可以把循环条件拿一个冒号替代,这样可以做到死循环。
shell脚本中的函数:
在shell脚本函数的格式为:
1 | function 函数名() { |
在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。
函数使用示例:
1 | [root@localhost sbin]# cat func.sh |
shell脚本实例:
(1)计算1-100的和:
1 | [root@localhost sbin]# cat sum1-100.sh |
(2)要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止;
1 | [root@localhost sbin]# cat sum.sh |
(3)把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下;
1 | [root@localhost sbin]# cat copydir.sh |
(4)批量建立用户user_00, user_01, … user_100并且所有用户同属于users组;
1 | [root@localhost sbin]# cat useradd.sh |
(5)截取文件test.log中包含关键词 ‘abc’ 的行中的第一列(假设分隔符为 ”:” ),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;
1 | ! /bin/bash |
(6)判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255, 0<n3<255, 0<n4<255)。
1 | ! /bin/bash |