一.补充知识点
1.系统定时任务
系统定时任务需要用到crontab命令,但是使用此命令有一个前提,即需要打开crond服务。为了不那么复杂,可以直接使用我之前学的systemctl命令重新启动crond服务。
语法:``crontab [-e -l -r] `
选项:-e 编辑crontab定时任务;-l 查询系统crontab任务;-r 删除当前用户的所有crontab任务
参数:
项目 含义 范围
第一个“*” 一小时当中的第几分钟 0-59
第二个“*” 一天当中的第几个小时 0-23
第三个“*“ 一个月当中的第几天 1-31
第四个“*” 一年当中的第几天 1-12
第五个“*” 一周当中的星期几 0-7
参数特殊符号:
特殊符号 含义
* 代表任意时间
, 代表不连续的时间
- 代表连续的时间
*/n 代表每隔多久执行一次
注意,这里使用crontab -e进入编辑后(界面此时是一个vim编辑器),先输入要设置的5个“*”,然后输入命令保存即可。
2.克隆虚拟机
之前我们了解了虚拟机快照技术,这对我们个人平时试错有很大的帮助,同时这里再补充一种技术,克隆虚拟机。它不仅能有助于恢复,同时对如果想把我们的虚拟机分享给别人(假设你的虚拟机配置了许多东西,别人重新安装配置很麻烦,而你们需要相同工作环境),那么这个时候使用克隆虚拟机技术就相当方便了。
如果你需要使用克隆技术,这里有一个其他博主的链接,或许对你有帮助虚拟机克隆
二.初识shell
1.shell
Shell (外壳)是一个用C语言编写的程序,它是用户使用Linux 的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
2.脚本
脚本简单地说就是一条条的文字命令,这些文字命令是可以看到的(如可以用记事本打开查看、编辑)。常见的脚本: JavaScript, VBScript,ASP, JSP, PHP, SQL, Perl, Shell, python, Ruby, JavaFX,Lua等。
3.常见shell
在Linux中有很多类型的shell, 不同的shell具备不同的功能,shell 还决定了脚本中函数的语法,Linux中默认的shell是/bin/bash,流行的shell 有ash、bash、 ksh、 csh、zsh等,不同的shell都有自己的特点以及用途。
大多数Linux系统默认使用的shell, bash shell是Bourne shell的一个免费版本,它是最早的Unix shell, bash 还有一个特点, 可以通过help 命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
4.shell基础
约定俗成,文件以.sh结尾代表一个shell文件
shell文件开始必须是#!/bin/bash,代表选择这个版本解释器
执行shell文件。使用命令bash(sh) 路径
其实执行shell文件的方式有许多中,但是上面这种不需要任何其他命令辅助,其他方式或多或少都有一些问题,使用这一种即可。
三.shell变量
1.系统预定义变量
$HOME 、$PWD、$SHELL、$USER等是系统预定义的变量,是环境变量,在所有的shell文件中都能使用。
关于环境变量(全局变量)或者说系统预定义变量可以参考我的上一篇博客:环境变量
补充:
Bash是一种Unix/Linux操作系统的命令行解释器,它允许用户在终端上输入命令并执行它们。可以单独使用bash命令来启动一个新的Bash shell会话,在该会话中,您可以执行各种命令和操作。例如,在终端上输入bash并按Enter键可以启动新的Bash shell会话。此时,您将看到一个新的命令提示符,表示您现在位于一个新的Bash shell中,可以在此处输入各种命令以进行操作。要退出Bash shell会话,请输入exit并按Enter键即可。
2.自定义变量
1.基本语法
- 定义变量:变量名=变量值,注意,=号前后不能有空格
- 撤销变量:unset 变量名
- 声明静态变量(只读变量,无法更改):readonly 变量,注意:不能 unset
2.变量定义规则
- (1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
- (2)等号两侧不能有空格
- (3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。
- (4)变量的值如果有空格,需要使用双引号或单引号括起来
3.演示
3.特殊变量
1. $n
$n (功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
touch parameter.sh vim parameter.sh #!/bin/bash echo '==========$n==========' echo $0 echo $1 echo $2 [atguigu@hadoop101 shells]$ chmod 777 parameter.sh [atguigu@hadoop101 shells]$ ./parameter.sh cls xz ==========$n========== ./parameter.sh cls xz
2.$#
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
vim parameter.sh #!/bin/bash echo '==========$n==========' echo $0 echo $1 echo $2 echo '==========$#==========' echo $# [atguigu@hadoop101 shells]$ chmod 777 parameter.sh [atguigu@hadoop101 shells]$ ./parameter.sh cls xz ==========$n========== ./parameter.sh cls xz ==========$#========== 2
3.$*、$@
- $* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
- $@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
vim parameter.sh #!/bin/bash echo '==========$n==========' echo $0 echo $1 echo $2 echo '==========$#==========' echo $# echo '==========$*==========' echo $* echo '==========$@==========' echo $@ [atguigu@hadoop101 shells]$ ./parameter.sh a b c d e f g ==========$n========== ./parameter.sh a b ==========$#========== 7 ==========$*========== a b c d e f g ==========$@========== a b c d e f g
4.$?
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
./helloworld.sh hello world echo $? 0
四.运算符和条件判断
1.运算符
基本语法:$((运算式))或$[运算式]
在其他语言中,定义变量的方式你应该不陌生,但是如果在shell中定义变量a=1+5,你可以尝试一下他输出的是什么,针对shell里面的运算,有一个新的命令expr可以计算,但由于乘法运算的星号在shell中有其他意思,它会报错,所以才设置了运算符。
实际操作:
2.条件判断
语法:(1)test condition (2)[ condition ](注意 condition 前后要有空格)两种方式任选一种即可
注意:条件非空即为 true,[ atguigu ]返回 true,[ ] 返回 false。
常用判断条件:
(1)两个整数之间比较
-eq 等于(equal) -ne 不等于(not equal)
-lt 小于(less than) -le 小于等于(less equal)
-gt 大于(greater than) -ge 大于等于(greater equal)
注:如果是字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。
(2)按照文件权限进行判断
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)
多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
演示:
五. read 读取控制台输入
在shell变量中我们知道输入.sh文件参数可以通过特殊变量$n的意义进行操作,但是不可能总是这种输入,shell里面也有类似于C语言中scanf()函数的键盘输入函数,即这里用的read函数。
1.基本语法
语法:read (选项) (参数)
①选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
②参数
变量:指定读取值的变量名
2.演示代码
$ touch read.sh $ vim read.sh #!/bin/bash read -t 7 -p "Enter your name in 7 seconds :" NN echo $NN
上面两行为终端输入命令,下下面三行即read.sh文件的内容,运行即可。
六.说明
新星计划:Linux运维@刘晨阳导师创作打卡4!