linux 之 shell编程 (详细过程)

什么是shell?

在这里插入图片描述

快速入门

1.脚本需要以 #!/bin/bash 开头,来指定执行脚本的解析器
2.脚本需要可执行权限
案例
1.创建一个简单的shell脚本
在这里插入图片描述2.编写shell脚本

在这里插入图片描述3.添加脚本权限

在这里插入图片描述
4.然后执行
在这里插入图片描述

shell 变量

系统变量

$HOME,$PWD,$USER,$PATH....

在这里插入图片描述
可以使用 set | more 显示所有当前 Shell 所有变量
在这里插入图片描述

自定义变量

基本语法

  1. 定义变量:变量=值
    2)撤销变量:unset 变量
  2. 声明静态变量:readonly 变量,注意:不能unset
    案例
    在这里插入图片描述
    在这里插入图片描述
    声明静态的变量B,不能 unset
    在这里插入图片描述
    在这里插入图片描述
    变量定义规则
 1.变量和java有曲同工之妙,可以由字母下划线,数字,组成,但是不能以数字开头
 2.等号两侧不能有空格
 3.变量名字一般习惯大写
 

变量赋值

在这里插入图片描述执行
在这里插入图片描述

设置环境变量已经shell注释

基本语法

1) export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
2) source 配置文件 (功能描述:让修改后的配置信息立即生效)
3) echo $变量名 (功能描述:查询环境变量的值)

示意图
在这里插入图片描述

位置参数变量

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量 比如 :
./myshell.sh 100 200 , 这个就是一个执行shell的命令行,可以在 myshell 脚本中获取到参数信息
基本语法

$n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参 数需要用
大括号包含,如${
    
    10})
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$#(功能描述:这个变量代表命令行中所有参数的个数)

案例

在这里插入图片## 标题描述
在这里插入图片描述

预定义变量

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个
变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

案例
在这里插入图片描述
在这里插入图片描述

运算符

基本语法

1) “$(( 运算式 ))”或“$[ 运算式 ]” (推荐)
2) expr m + n 注意expr运算符间要有空格
3) *, /, % 乘,除,取余

在这里插入图片描述
执行
在这里插入图片描述请求出命令行的两个参数[整数]的和
在这里插入图片描述
执行

请求出命令行的两个参数[整数]的和

条件判断

[ condition ](注意condition前后要有空格) 非空返回true,可使用$?验证(0为true,>1为false)
应用实例
[ atguigu ] 返回true
[] 返回false
[condition] && echo OK || echo notok 条件满足,执行后面的语句

常用判断条件
1) 两个整数的比较
= 字符串比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于
2) 按照文件权限进行判断
-r 有读的权限 -w 有写的权限 -x 有执行的权限
3)按照文件类型进行判断
-f 文件存在并且是一个常规的文件 -e 文件存在 -d 文件存在并是一个目录

在这里插入图片描述在这里插入图片描述

流程控制(重点)

if 判断
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
fi

注意事项:(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格(2) 推荐使用第二种方式

在这里插入图片描述

在这里插入图片描述

case 流程

case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

在这里插入图片描述
测试
在这里插入图片描述

for 循环

基本语法1

for 变量 in 值123do
程序
done

在这里插入图片描述
在这里插入图片描述
实际上使用 $@ 较多,因为可以对参数集合中的每一个参数进行处理
基本语法2

for (( 初始值;循环控制条件;变量变化))
do
程序
done

在这里插入图片描述在这里插入图片描述

while 循环

while [ 条件判断式 ]
do
程序
done

在这里插入图片描述
在这里插入图片描述
读取控制台输入 #
read(选项) (参数)
选项:

-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。 参数
参数
变量:指定读取值的变量名

案例1:读取控制台输入一个num值
在这里插入图片描述

在这里插入图片描述函数 #
包含系统内置函数和自定义函数,这里简单介绍两个常用的内置函数

basename
功能:返回完整路径最后/ 的部分,常用于获取文件名
basename pathname [suffix]
basename string [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’) 字符,然后将字符串
显示出来
选项: suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉

在这里插入图片描述
dirname
功能:返回完整路径最后/ 的前面的部分,常用于返回路径部分
在这里插入图片描述

自定义函数

[ function ] funname[()]
{
Action;
[return int;]
} 调用直接写函数名:funname [值]
案例1:计算输入两个参数的和, getSum

在这里插入图片描述
在这里插入图片描述

数据库备份脚本

在这里插入图片描述

在这里插入图片描述

#!/bin/bash
# 完成数据库的定时备份
# 数据库备份的路径
BACKUP=/opt/module/data
# 数据库备份文件名
BACKUP_FILENAME=$(date "+%Y-%m-%d_%H-%M-%S")
# echo $BACKUP_FILENAME 测试文件名是否ok
echo "=============开始备份中============"

echo "=============备份的文件名为${BACKUP}/${BACKUP_FILENAME}.tar.gz=========="
# mysql主机名
HOST=localhost # 远程备份写对应的ip地址即可
# 用户名
DB_USER=root
# 密码
DB_PASSWORD=123456
# 备份数据库的名称
DATABASE=hivef.sql
# 创建备份的路径:如果存在就什么都不做;如果不存在就创建
[ ! -e "$BACKUP/$BACKUP_FILENAME" ] && mkdir -p "$BACKUP/$BACKUP_FILENAME"
# 执行mysql 的备份命令
mysqldump -u${
    
    DB_USER} -p${
    
    DB_PASSWORD} --host=${
    
    HOST} ${
    
    DATABASE} | gzip >
${
    
    BACKUP}/${
    
    BACKUP_FILENAME}/${
    
    BACKUP_FILENAME}.sql.gz

猜你喜欢

转载自blog.csdn.net/qq_43674360/article/details/111315783