1.我的shell处---helloworld

shell文件内容的第一句:

#!/bin/bash #表明我们的shell用bash解析!!!
echo “helloworld” #保存 执行。确保文件具有可执行权限!

有执行权限 直接 ./文件 执行

若无可执行权限,可用sh ./文件 执行

单行注释用 #语句
多行注释用 :<<[符号] 语句 [符号] 
例如:<<!
    语句1
    语句2
    !   

2.shell的变量

系统变量和自定义变量
显示当前shell所有变量 shell

基本语法:

  1. 定义变量:变量=值
  2. 撤销变量:unset 变量
  3. 生命静态变量:readonly 变量,注意:不能unset

定义变量规则

  1. 变量名字母、数字、下划线,但不能以数字开头
  2. 等号两侧不能有空格
  3. 变量名一般习惯大写

将命令的返回值赋给变量

1.A=`ls -la`  反引号,结果返回
2.A=$(ls -la)  等价于反引号

在这里插入图片描述

设置环境变量

基本语法
1.export 变量名=变量值 shell变量输出为环境变量
2.source 配置文件 使修改后配置文件生效
3.echo $变量名 查询环境变量值
注:环境变量可在其他shell文件中使用。

位置参数变量

基本语法

  1. 0代表命令本身, 9代表第1-9个参数,第10个用$(10) )
  2. $* (代表命令行所有参数 )
  3. *含义相同, 但将每个参数区分对待 )
  4. $# (代表参数个数 )

实例
实例

预定义变量

基本语法

  1. $$ (当前进程的PID号 )
  2. $! (后台运行的最后一个进程的进程号 )
  3. $? (最后依次执行的命令的返回状态,0证明正确;非0,执行不正确)

在这里插入图片描述

3.运算符

运算操作的基本语法

  1. [运算式]”
  2. expr m + n #注意此方式下:符号左右有空格

在这里插入图片描述

4.条件判断

基本语法
[ condition(条件) ] #条件两端有空格哦~
非空返回true,可使用$?验证,(0true,>1false)

常用判断条件
注意:比较符号 两端也有空格!!!

  1. 两个整数的比较
  • -lt 小于
  • -le 小于等于
  • -eq 等于
  • -gt 大于
  • -gl 大于等于
  • -ne 不等于
  • 字符串比较 =
  1. 按照文件读写权限判断
  • -r 读权限
  • -w 写权限
  • -x 执行权限
  • 可组合 如-rwx
  1. 按照文件类型进行判断
  • -f 文件存在且是一个常规文件
  • -e 文件存在
  • -d 文件存在且是一个目录文件

在这里插入图片描述

5.流程控制

if 判断

基本语法

if[ condition ];then  #在同一行需加分号
    程序
fi  
或者  
if[ condition ]  
then  
    程序1
elif[ condition ]  
then  
    程序2
fi  

在这里插入图片描述

case 语句

基本语法

case $变量名 in
"值1")
    程序1  #若变量=值1,执行程序1
;; #结束符两分号
"值2")
    程序2  #若变量=值2,执行程序2
;;
.....省略其他分支
*)
    程序n  #相当于default时执行
;;
esac #case的结束符为他的反写

在这里插入图片描述

for 循环

基本语法1

for 变量 in 值1 值2 值3... #意思为 将值1,值2,值3依次赋予i进行do
do
    程序
done #这里for结束不是rof反写哦!

基本语法2

for ((初始值;循环控制条件;变量变化)) #与c/c++相似
do
    程序
done

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

while 循环

基本语法

while [ condition ] #注意while后有个空格 条件两端也有空格哦!
do
    程序
done

在这里插入图片描述

read读取控制台输入

基本语法

read (选项) (参数)
选项:
-p:指定读取值时的提示符,即提示语句“这个是什么”之类
-t:指定等待时间内输入(秒),若未输入,不等待
参数:
变量:指定读取值的变量名

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

函数

系统函数

  • basename 函数
    功能:返回路径最后 /的部分,常用于获取文件名,可将文件名后缀不显示
    basename[pathname][suffix]
    basename[string][suffix] #字符串显示
    选项:
    suffix为选项后缀,若指定,则函数会将pathname或string中的suffix去掉
  • dirname 函数
    功能:返回路径最后一个/的前面的部分,常用于返回路径
    dirname[path/file] #返回path
    在这里插入图片描述

自定义函数

基本语法
function funname()
{
action;
[return int;] #[]内可不写
}
调用直接写函数名: funname 值
在这里插入图片描述
在这里插入图片描述

综合实例

  • 需求分析
  1. 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
  2. 备份开始和结束给出对应提示信息
  3. 备份后文件以备份时间为文件名,打包为.tar.gz形式
  4. 备份同时,检查是否有10天前备份的数据库文件,有就删除。
- 代码实现示例
#!/bin/bash
#完成数据库的定时备份
#分析分为两步,备份脚本+crontab任务添加  

#备份路径变量
BACKUP=/data/backup/db
#当前时间变量
DATETIME=$(date +%Y_%m_%d%H%M%S)

#调试可以log,即插入echo语句,采用大括号括变量 为了分辨清楚,与不加相同。
#echo ${DATETIME} 

#条件判断,相当于if xxx;若不存在此路径,创建此路径;&&作用
#mkdir -p 创建多级目录
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"

#备份开始提示信息
echo "====Start BackUp===="
echo "===path is $BACKUP==="

#主机名变量
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#数据库名变量
DATABASE=atguiguDB
#备份数据库mysqldump,需装mysql
#| gzip 对备份的文件进行gzip压缩操作 > 流入(放置) xxx/xxx/xxx.gz
mysqldump -u${DB_USER} -p${DB_PWD} --host${HOST} ${DATEBASE} | gzip >$BACKUP/$DATETIME/$DATETIME.sql.gz
#路径更改
cd $BACKUP

#tar打包此文件
tar -zcvf $DATETIME.tar.gz

#有了打包,删除打包前的文件夹
rm -rf "$BACKUP/$DATETIME"

#删除10天前创建的文件包
#-mtime +10 找10天前创建或修改的文件
#-exec 找到的文件进行其之后command操作 {}代表找到的所有 \;代表结束
find $BACKUP -mtime +10 -name *.tar.gz -exec rm -rf {} \;

#提示备份结束
echo "====BackUp End===="

:<<!
#这是一个sh脚本,需将其加入crontab中按时间计划执行
#将此shell保存为mysql_backup.sh;路径为/usr/sbin
#不要忘了给文件加入-x权限!
#命令行操作
crontab -e
#进入vim窗口输入
10 2 * * * /usr/sbin/mysql_backup.sh 
#保存退出即可
!