1.我的shell处—helloworld
shell文件内容的第一句:
#!/bin/bash #表明我们的shell用bash解析!!!
echo “helloworld” #保存 执行。确保文件具有可执行权限!
有执行权限 直接 ./文件 执行
若无可执行权限,可用sh ./文件 执行
单行注释用 #语句
多行注释用 :<<[符号] 语句 [符号]
例如:<<!
语句1
语句2
!
2.shell的变量
系统变量和自定义变量
显示当前shell所有变量 shell
基本语法:
- 定义变量:变量=值
- 撤销变量:unset 变量
- 生命静态变量:readonly 变量,注意:不能unset
定义变量规则
- 变量名字母、数字、下划线,但不能以数字开头
- 等号两侧不能有空格
- 变量名一般习惯大写
将命令的返回值赋给变量
1.A=`ls -la` 反引号,结果返回
2.A=$(ls -la) 等价于反引号
设置环境变量
基本语法
1.export 变量名=变量值 shell变量输出为环境变量
2.source 配置文件 使修改后配置文件生效
3.echo $变量名 查询环境变量值
注:环境变量可在其他shell文件中使用。
位置参数变量
基本语法
- $n ($0代表命令本身, $1- 9 代 表 第 1 − 9 个 参 数 , 第 10 个 用 9代表第1-9个参数,第10个用 9代表第1−9个参数,第10个用(10) )
- $* (代表命令行所有参数 )
- @ ( 与 @ (与 @(与*含义相同, 但将每个参数区分对待 )
- $# (代表参数个数 )
预定义变量
基本语法
- $$ (当前进程的PID号 )
- $! (后台运行的最后一个进程的进程号 )
- $? (最后依次执行的命令的返回状态,0证明正确;非0,执行不正确)
3.运算符
运算操作的基本语法
- “ ( ( 运 算 式 ) ) ” 或 者 “ ((运算式))” 或者 “ ((运算式))”或者“[运算式]”
- expr m + n #注意此方式下:符号左右有空格
4.条件判断
基本语法
[ condition(条件) ] #条件两端有空格哦~
非空返回true,可使用$?验证,(0true,>1false)
常用判断条件
注意:比较符号 两端也有空格!!!
- 两个整数的比较
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -gl 大于等于
- -ne 不等于
- 字符串比较 =
- 按照文件读写权限判断
- -r 读权限
- -w 写权限
- -x 执行权限
- 可组合 如-rwx
- 按照文件类型进行判断
- -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 值
综合实例
- 需求分析
- 每天凌晨2:10备份数据库atguiguDB到/data/backup/db
- 备份开始和结束给出对应提示信息
- 备份后文件以备份时间为文件名,打包为.tar.gz形式
- 备份同时,检查是否有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
#保存退出即可
!