是一个命令解释器,它为用户提供一个向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