shell脚本

shell脚本介绍

把所有操作都记录到一个文档中,然后去调用文档中的命令,这个文档就是shell脚本。
Shell脚本能帮助我们方便地管理服务器,我们可以指定一个任务计划,定时去执行某个shell脚本以满足需求。
自定义的脚本最好都放在/usr/local/sbin/目录下
一是可以更好地管理文档;二是以后接管你工作的管理员都知道自定义脚本放在那里,方便维护。

编写第一个shell脚本

在这里插入图片描述

shell脚本另一种执行方式

使用该方法运行shell脚本的前提是有脚本本身的执行权限
所以需要给脚本加一个x权限
另外,使用sh命令执行一个shell脚本时,可以加-x 选项来查看这个脚本的执行过程,这样有利于我们调试这个脚本

在这里插入图片描述

命令date

date +%Y 表示以四位数字格式打印年份
date +%y 表示以两位数字格式打印年份
date +%m 表示月份
date +%d 表示日期
date +%H 表示小时
date +%M 表示分钟
date +%S 表示秒
date +%w 表示星期。结果显示0则表示周日
举例:现在时间,一天之前,一个小时之前,一分钟之前

在这里插入图片描述

shell脚本中的变量

脚本中多次出现某一个命令或路径,如果路径不对想修改一下,就得一个一个改,或者使用批量修改替换的命令改。
变量就是用来解决这个问题的。

编写第一个与变量相关的脚本

在这里插入图片描述

执行
反引号的作用:将引号中的字符串当成shell命令执行,返回命令的执行结果。
d和d1在脚本中作为变量出现

在这里插入图片描述

数学运算

数学运算要用【】括起来,并且前面要加符号$

在这里插入图片描述在这里插入图片描述

和用户交互

在这里插入图片描述在这里插入图片描述

加上-x 再运行

在这里插入图片描述

shell脚本预设变量

/etc/init.d/iptables restart 命令前面的/etc/init.d/iptables其实就是一个shell脚本。
脚本后面为什么可以跟restart字符串呢?
这就设置shell脚本的预设变量。实际上,shell脚本在执行时,后面可以跟一个或者多个参数

在这里插入图片描述在这里插入图片描述

shell脚本中的逻辑判断

不带else
格式:
if (判断语句);then
command
fi
((a<60))这是脚本中特有的格式,只能用两个括号,一个或者不用括号都会报错

在这里插入图片描述在这里插入图片描述

带有else
格式:
if (判断语句);then
command
else
command
fi

在这里插入图片描述在这里插入图片描述

带有elif
格式:
if (判断语句1);then
command
elif (判断语句2);then
command
else
command
fi
这里的&&表示“并且”的意思,当然也可以使用||表示“或者”

在这里插入图片描述在这里插入图片描述

判断数值大小除了可以用(())形式外,还可以使用[ ]。
但是不能使用大于等于符号了
要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于):
#a=10; if [$a -lt 5]; then echo ok; fi
#a=10; if [$a -gt 5]; then echo ok; fi
ok
#a=10; if [$a -ge 10]; then echo ok; fi
ok
#a=10; if [$a -eq 10]; then echo ok; fi
ok
#a=10; if [$a -ne 10]; then echo ok; fi

下面是在if语句中使用&&和||的情况:
#a=10; if [$a -lt 1] || [$a -gt 5]; then echo ok; fi
ok
#a=10; if [$a -gt 1] && [$a -le 10]; then echo ok; fi
ok

和文档相关的判断

-e:判断文件或目录是否存在;
-d:判断是不是目录以及是否存在;
-f:判断是不是普通文件以及是否存在;
-r:判断是否有读权限;
-w:判断是否有写权限;
-x:判断是否可执行。
使用if判断时具体格式:
if [-e filename];then
command
fi

示例代码如下:

#if [-d /home/]; then echo ok; fi
ok
#if [-f /home/]; then echo ok; fi
因为/home/是目录而非文件,所以并不会显示ok。其他示例如下:
#if [-f /root/test.txt]; then echo ok; fi
ok
#if [-r /root/test.txt]; then echo ok; fi
ok
#if [-w /root/test.txt]; then echo ok; fi
ok
#if [-x /root/test.txt]; then echo ok; fi
#if [-e /root/test.txt]; then echo ok; fi

case逻辑判断

格式:
case 变量 in
value1)
         command
          ;;
Value2)
         command
         ;;
Value3)
       command
       ;;
*)
       command
       ;;
esac
不限制value的个数,*代表其他数值
例子:判断输入值是奇数还是偶数脚本

在这里插入图片描述在这里插入图片描述

case脚本常用于编写系统服务的启动副本,例如在/etc/init.d/network中就用到了

shell脚本中的循环

for循环
格式:
for 变量名 in 循环的条件;do
command
` done

在这里插入图片描述在这里插入图片描述

while循环
常用while循环来编写死循环的脚本,用来监控某项服务。
格式:
while 条件 ; do
command
done

在这里插入图片描述在这里插入图片描述

可用一个冒号代表循环条件,这样可以做到死循环
举例:while :; do
command
sleep 3
done

shell脚本中的函数

Shell脚本中的函数就是先把一段代码整理到一个小单元中,并给这个小单元命名,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代码总是重复使用,如果写成函数,每次用到时直接用函数名代替即可。

编写一个简单的带有函数功能的shell脚本

在这里插入图片描述在这里插入图片描述

func.sh 中的sum()为自定义函数。在shell脚本中函数格式如下:
function 函数名()
{
command1
command2
}
需要注意的是,在shell脚本中,函数一定要写在最前面。
因为函数是要被调用的,如果还没有出现就被调用,肯定会出错。

shell脚本中的终端和继续

break用在循环中,不管是for还是while都可以。
在脚本中使用它,表示退出该层循环。
之所以说是层,是因为我们有时候用的嵌套循环,大循环里面还有小循环,而break只是退出那一层循环,他的上层循环不受影响。

在这里插入图片描述在这里插入图片描述

continue

continue也是用在循环中的,和break不同的是,当在shell脚本中遇到continue时,结束的不是整个循环,而是本次循环

在这里插入图片描述在这里插入图片描述

exit

与前两个功能类似,但是它的作用范围更大,直接退出整个shell脚本。

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值