是一个命令解释器,它为用户提供一个向Linux内核发起请求以便于运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。【以bash为例】

(1)脚本要以 #!/bin/bash开头

(2)可以通过sh + 脚本执行shell脚本

(3)也可以为要执行脚本的用户添加权限,输入脚本的路径即可

set指令可以查看系统变量】# 注释内容指令完成单行注释:<指令完成多行注释【两次的语句要另起一行】(1)Shell 变量的命名规则:
变量名可以由字母、数字、下划线组成,但是不能以数字开头
(2)使用规范:
变量名采用大写字母,等号两侧不能留有空格
(3)变量的几个基本操作
通过变量名=变量值指令定义变量【静态变量要添加 readonly关键字】

echo 后的引号添不添加都可以,运行脚本输出结果如下

通过unset 变量名指令撤销变量【静态变量不能被撤销】

撤销后变量就无法使用了,运行脚本输出结果如下

通过反引号**``或 ∗ ∗ 来将命令的返回值赋给变量,获取变量的值时也要在变量名前添加 ∗ ∗ **来将命令的返回值赋给变量,获取变量的值时也要在变量名前添加** ∗∗来将命令的返回值赋给变量,获取变量的值时也要在变量名前添加∗∗**符号
(1)编辑/etc/profile文件,添加环境变量【使用了export关键字】

(2)通过source /etc/profile刷新配置信息
(3)在终端利用echo直接输出TOMCAT_HOME

利用之前创建的var.sh文件调用并输出这个环境变量


$n代表传入的第n个参数,执行脚本时在末尾添加多个参数【用空格隔开,传递的参数可以小于脚本中应用的参数个数】| 参数的语法 | 基本含义 |
|---|---|
| $n | $1-9代表第一个到第九个参数,十个以上要写成 ${n}的形式 |
| $* | 代表全部参数,把所有参数看成一个整体 |
| $@ | 代表全部参数,把所有参数区分对待 |
| $# | 代表命令行中参数的个数 |

执行脚本并传入参数,运行结果如下:

(1)$$返回当前进程号
(2)$!返回后台运行的最后一个进程号
(3)$?返回最后一次执行的命令的运行状态【0代表正常运行,其他代表运行出现了异常】
(1)有三种运算表达式
exper 表达式一次只能进行一次运算【比如既有加法也有乘法,那么要用两次来计算】
$((表达式))表达式为任意数学表达式【支持Shell的】
$[表达式]这个属于上式的简化版本【推荐】
(2)运算符
| 符号 | 含义 |
|---|---|
| + | 加法 |
| - | 减法 |
* | 乘法(如果采用expr表达式要添加反斜杠\*) |
| / | 除法 |
| % | 取余 |

运算结果如下:

注意:【如果采用expr表达式】
获取表达式结果要在两侧添加反引号**``**
表达式之间以及与expr之间都有留有一个空格
if [ 条件 ]
then
满足条件的处理;
fi
(1)条件两侧留有一个空格
(2)如果条件处不是一个条件表达式,那么就为true
(3)字符串比较:=
(4)两个整数比较:
| 符号 | 含义 |
|---|---|
| -lt | 小于 |
| -gt | 大于 |
| -eq | 等于 |
| -ne | 不等于 |
| -le | 小于等于 |
| -ge | 大于等于 |
(5)文件权限比较:
| 符号 | 含义 |
|---|---|
| -r | 有读权限 |
| -w | 有写权限 |
| -x | 有执行权限 |
(6)文件类型比较:
| 符号 | 含义 |
|---|---|
| -f | 文件存在并且是一个常规文件 |
| -e | 文件存在 |
| -d | 文件存在并且是一个目录 |
| -b | 文件存在并且是一个块设备文件 |
| -c | 文件存在并且是一个字符设备文 |
| -p | 文件存在并且是一个管道文件 |
| -s | 文件存在并且是一个套接字文件 |
之所以没有-l是因为我测试发现

(7)案例分析

运行结果如下:

(1)单分支的代码格式:
if [ 条件判断式 ]
then
代码
fi
(2)多分支的代码格式:
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
(3)案例分析:输入考试成绩,大于60输出及格,否则输出不及格
#!/bin/bash
if [ $1 -ge 60]
then
echo "及格";
elif [ $1 -lt 60]
then
echo "不及格";
fi;

(1)基本语法
case $变量名 in
"值1" )
代码
;;
"值2" )
代码
;;
* )
default部分的代码
;;
esac
(3)案例分析:参数为1输出1,参数为2输出2,其他情况输出0
#!/bin/bash
case $1 in
"1" )
echo 1;
;;
"2" )
echo 2;
;;
* )
echo 0;
;;
esac;

(1)for循环的基本语法
# 语法一
for 变量 in 值1 值2 ...
do
程序
done
# 语法二
for(( 初始值;循环控制条件;变量变化))
do
程序
done
(2)通过参数传入结合语法一我们可以看出$*与$@的区别
#!/bin/bash
for i in "$*"
do
echo num = $i;
done
for j in "$@"
do
echo num = $j;
done
输出结果如下:

有几个需要注意的点:【通过测试案例得知】
$*添加引号,那么输出的结果也是三个,因为尽管$*是一个参数整体,但是$i每次从中只取一个子参数(3)通过范围循环,我们完成1到100的和【注意:此处的判断符号使用的是数学符号】
#!/bin/bash
SUM=0;
for((i=1;i<=100;i++))
do
SUM=$[SUM+$i];
done
echo sum = $SUM;

(3)while循环语法格式【while与中括号、条件两侧 都有一个空格】
while [ 条件 ]
do
代码
done
注意此处的条件采用了条件判断语句的符号,而不是直接使用数学符号
利用while循环实现1-100加和
#!/bin/bash
SUM=0;
i=0;
while [ $i -le 100]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo sum = $SUM

(1)语法格式:read 选项 参数【参数要与前面的内容有一个空格】
通过-p选项可以给出提示信息【自己预先设置的】
通过-t选项可以设置等待输入时长(s)【超时则跳过当前输入】
(2)案例分析:从键盘输入一个数NUM,不能超过5s
#!/bin/bash
read -t 5 -p "请输入一个数" NUM;
echo "你输入的数为$NUM";
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p14nfnDe-1663549400089)(attachment:a24240ff493bd90f3141efd78c08f6c5)]
(1)系统函数【常用的有两个】
通过base 路径指令获取文件名;通过dirname 路径指令获取文件的路径【不包括文件名】
(2)自定义函数【基本语法如下】
# 函数的定义
function 函数名(参数列表){
代码
}
# 函数的定义要写在调用前面
# 函数的调用
函数名 参数列表;
实现一个两个数加法函数:

运行结果如下:


数据库备份步骤:

编写Shell脚本【因为我没有安装Mysql所以此处为参考代码】

创建定时任务
crontab -e
30 2 `* * *` /user/sbin/mysql_db_backup.sh