唐山石家庄做网站哪家好,sql wordpress迁移,注册公司费用大概多少,网站建设服务哪个便宜啊目录
Shell脚本基础
Shell脚本组成
Shell脚本工作方式
编写简单的Shell脚本
Shell脚本参数
Shell脚本接收参数
Shell脚本判断用户参数
文件测试与逻辑测试语句
整数测试比较语句
字符串比较语句
Shell流程控制
if条件判断语句
单分支
双分支
多分支
for循环语句…目录
Shell脚本基础
Shell脚本组成
Shell脚本工作方式
编写简单的Shell脚本
Shell脚本参数
Shell脚本接收参数
Shell脚本判断用户参数
文件测试与逻辑测试语句
整数测试比较语句
字符串比较语句
Shell流程控制
if条件判断语句
单分支
双分支
多分支
for循环语句根据范围进行循环
while循环语句根据条件进行循环
case条件测试语句判断语句
Shell脚本编写计划任务
一次性计划任务
长期性计划任务 Shell脚本基础
Shell脚本组成 Shell脚本由三部分组成 脚本声明、脚本注释、脚本命令 脚本声明 告诉系统我们是使用哪个解释器来执行Shell脚本 现在基本上都是使用/bin/bash解释器 所以一般脚本声明为 #!/bin/bash 脚本注释 写一些说明信息包括功能介绍、参数介绍等可有可无 此注释不会被系统读只是让用户看的 #开头 脚本命令 通过这些命令来完成某些事情 Shell脚本工作方式 交互式 用户每输入一条命令就立即执行 批处理 用户事先编写一个完整的Shell脚本Shell就会一次性执行脚本中的命令 编写简单的Shell脚本 简单的Shell脚本可以理解为就是命令的堆积能够实现一些固定的功能 没有调节测试语句、循环语句赋予的灵活的调节判断功能 创建Shell脚本 shell脚本可以没有后缀但是为了区分可以给个后缀.sh vim 123.sh 创建/编辑 名称为123的Shell脚本 编写简单的Shell脚本 #!/bin/bash 编写脚本声明 #this is test 编写脚本注释 pwd 编写脚本显示当前位置 grep /bin/bash /etc/passwd | wc -l 编写脚本显示可登录服务器的用户数量 执行Shell脚本 . 123.sh 路径Shell脚本名直接执行 Shell脚本用户需要执行权限可以更改权限 . 表示当前路径 bash 123.sh bash shell脚本名称通过bash命令调用Shell脚本 Shell脚本参数
Shell脚本接收参数 为了让Shell脚本程序更好地满足用户的一些实时需求 需要让脚本程序能够像之前执行命令那样接收用户的参数 此时就需要向Shell脚本传递参数 Shell脚本如何接收用户参数 在Shell脚本通过定义$N来接受用户输入的参数 $1、接收第一个位置参数 $2 接收第二个位置参数 Shell脚本的特殊参数 $0 脚本的名称 $# 统计接收参数的总数用户输入的所有参数的总数 $* 接收到的所有参数有哪些用户输入的所有参数 编写Shell脚本接收用户参数 编写Shell脚本 #!/bin/bash #this is test echo $1,$2,$4 接收用户输入的第1、2、4个参数并输出 echo neame is $0 显示脚本的名称 echo count receive parameter number is $# 统计用户输入的参数总数 echo all receive parameter is $* 用户输入的参数具体有哪些 执行脚本并输入参数 bash 123.sh 1 2 3 4 5 Shell脚本判断用户参数
判断语句格式[ 条件表达式 ]注意条件表达式前后都有空格
由于变量是没有定义类型的
在Shell中需要对输入的参数、变量进行类型判断需要手动去完成通过创建条件表达式完成
根据测试对象的不同条件表达式可分为以下4种
文件测试语句、逻辑测试语句查看判断结果、整数值比较语句、字符串比较语句
文件测试与逻辑测试语句 作用 判断文件是否存在 判断是什么类型的文件一般文件、目录文件、设备(块)文件、链接文件、管道文件 判断文件权限写入、读取、执行权限 具体操作符 [ -e 文件名称 ] 判断文件是否存在 [ -f 文件名称 ] 判断文件是否为一般文件-d 目录文件、-l 链接文件、-s 套接字文件、-b块设备文件、-c 字符设备文件、-p 管道文件 [ -w 文件名称 ] 判断文件的权限是否可以写入-r是否可以读取、-x是否可以执行 进行判断后如何得到判断结果 方一 通过echo$? 来得到判断结果 echo $? 输出上一个返回值的结果可以用此命令来查看判断文件的结果 如果结果为0表示上一个命令执行成功非零表示上一个命令执行失败 此方法要使用两条命令查看麻烦 方二 通过逻辑测试语句逻辑操作操作符来查看判断结果 与 前面的语句如果执行成功执行后面的语句 或|| 前面的语句如果执行失败执行后面的语句 非 取反值! 代表取反值!代表不等于 [ -e 文件名 ] 命令 如果文件存在就执行命令 [ ! -e 文件名 ] 将文件是否存在的结果取反 编写文件判断Shell脚本 #!/bin/bash #this is test [ -e /dev/fastab ] 判断/dec/fstab文件是否存在 echo this file $? 输出上一个判断文件执行结果 [ $USERroot ] echo be || “no be” 如果当前用户为root输出be否则输出no be 整数测试比较语句 对于数字比较所使用的操作符不能用、因为、是重定向符 数据比较通过操作符 -eq、-gt、-lt等来执行 [ 1 -eq 2 ] 判断1是否等于2 [ 1 -gt 2 ] 判断1是否大于2 [ 1 -lt 2 ] 判断1是否小于2 -ne 是否不等于 -le 是否等于或小于 -ge 是否大于或等于 编写整数比较语句 #!/bin/bash #this is test FREEfree -m | grep Mem | awk {print $4} 将空闲内存的值赋值给变量FREE [ $FREE -le 1024 ] echo $FREE is good || echo $FREE is bad 比较空闲内存大小小于等于1024为good否则为bad 字符串比较语句 -z 判断字符串内容是否为空 ! 比较字符串内容是否不同 比较字符串内容是否相同 编写字符串比较语句 #!/bin/bash #this is test [ -z $USERroot ] 判断当前用户是否为是root echo $? [ ! -z $USERroot ] 判断当前用户是否不是root echo $? Shell流程控制
if条件判断语句
if 条件测试语句if开头fi结尾可以分为单分支、双分支、多分支
单分支 语句格式 if 测试条件 then 条件通过所执行的命令可以多条如果在同一行用 ; 分隔多条命令 fi 编写单分支脚本 #!/bin/bash if [ ! -e /etc/admin ] 判断/etc/admin是不是不存在 then mkdir -p /etc/admin 如果不存在则创建/etc/admin echo [ -e /etc/admin ] echo create success 然后再判断/etc/admin是否创建成功 fi 双分支 语句格式 if 测试条件 then 条件通过所执行的操作 else 条件没有通过执行的操作 fi 编写双分支脚本 #!/bin/bash if [ ! -e /etc/admin ] 判断/etc/admin是不是不存在 then mkdir -p /etc/admin ; echo [ -e /etc/admin ] echo create success 如果文件不存在创建文件并判断文件是否创建成功 else echo this file is be 如果文件存在则输出this file is be fi 多分支 语句格式 if 测试条件1 then 条件1通过后执行的操作 elif 测试条件2 then 条件2通过后执行的操作 else 条件1和条件2都不满足的操作 fi 多分支编程 #!/bin/bash read -p input number: NUMBER 将用户输入的数据赋值到变量NMBER if [ $NUMBER -ge 80 ] [ $NUMBER -le 100 ];then 判断值是否≥80≤100 echo good 输出 elif [ $NUMBER -ge 60 ] [ $NUMBER -le 79 ];then 判断值是否≥60≤79 echo pass elif [ $NUMBER -ge 0 ] [ $NUMBER -le 59 ] ;then 判断值是否≥0≤59 echo fail else 以上条件都不满足 echo again input read -p Enter GRADE read 变量 读取单行数据内容并将此内容赋值给变量GRADE -p 提示用户输入信息 注意字母与数字不能够作比较小数也不可以和整数比较 for循环语句根据范围进行循环 语句格式 for 变量名 in 取值列表 do 操作命令 done 编写for循环语句 #!/bin/bash read -p input passwd: PASSWD 输入密码并赋值到变量PASSWD for USER1 in cat user.txt 从文件中提取数据赋值到变量USER1 do id $USER1 /dev/null 查看用户信息并将回显的内容送到黑洞 if [ $? -eq 0 ];then 如果用户存在即上个命令执行成功输出用户is be echo $USER1 is be else 如果用户不存在上个命令执行就不成功执行以下命令 useradd $USER1 /dev/null echo $PASSWD | passwd --stdin $USER1 /dev/null fi done while循环语句根据条件进行循环 只要条件为真则一直循环只要条件不成立才会停止 语句格式 while 条件 do 执行操作 done while true 一直循环下去直到遇到强制退出符 case条件测试语句判断语句 语句格式 case 变量值 in 范围值1) 输出命令1 ;; 范围值2) 输出命令2 ;; * 默认命令 esac 注意 case 命令只有右边的小括号没有左边的小括号 case语句中的 | 指的是 逻辑或 的意思 * 匹配的是空值或者无穷多的信息 前面的范围值后面要加;; 最后的范围值不需要加;; 编写case判断语句 #!/bin/bash read -p input KEY case $KEY in [a-z]|[A-Z]) echo $KEY this is letter ;; [0-9]) echo $KEY this is number ;; *) echo $KEY this is ohter characters esac Shell脚本编写计划任务
管理员可以编辑自己的和普通用户的计划任务
普通用户只可以编辑自己的计划任务
计划任务根据执行方式分为一次性计划任务、长期性计划任务
一次性计划任务 此计划只执行一次执行后或就不会再执行了 通过at命令来实现 at 时间 输入想要执行的任务 ctrl d 保存并退出 ctrl c 直接退出 at -c 任务编码 查看计划任务的工作 at -l 显示待执行的任务列表显示任务编号 任务执行时间 发起用户 at -d 任务编码 删除指定待执行任务 at -m 任务执行后给用户发邮件 at now 5 MINUTE 创建任务5分钟后执行HOUR时、DAY天、MONTH月 atrm命令 atrm 任务编码 删除计划任务 长期性计划任务 长期性计划任务周期性的根据时间规则执行任务 时间规则格式-此格式是固定的如果不配置参数需要使用*来做占位 分、时、日、月、星期 、命令 其中命令的使用方式必须是 命令路径方式可以通过which来进行查找 即ls -l 需要写为 /usr/bin/ls -l 例子 10 21 12 * * 命令 每月的12号21点10分执行任务 * * * */2 * 命令 当下开始每间隔两个月 * * * 1,2,3 * 命令 1、2、3个月 * * * 1-5 * 命令 1到5个月 一般星期和日期只选择一个进行书写 crontab命令 长期计划任务通过Linux的crond服务来实现 而crond服务需要通过crontab命令来进行配置 即crond是服务名称、crontab是配置工具名称 需要开启crond服务 systemctl enable crond 开启crond服务 systemctl restart crond 重新启动crond服务 如果配置了计划之后没有生效可以重新启动下服务 命令格式 crontab -e 创建/编辑计划任务 crontab -l 指定计划任务 crontab -r 删除计划任务 也可以直接通过命令路径的方式编辑计划 vim /etc/crontab 来创建/编辑计划任务 不过不推荐使用vim进行编辑虽然有注释但是没有纠错功能 使用crontab有纠错功能不过crontab 默认也是通过调用vim编译器来实现的 注意事项 当普通用户使用at和crontab不起作用时不一定是计划任务的原因 还可能是用户权限的问题