一.补充知识点
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!