手机网站 微信链接怎么做,规模以上工业企业总产值,互联网大学生创新创业项目计划书,北京网站排名seo1 为什么要学习Shell编程 
对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shel脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本. 
对于大数据程序员来说,需要编写Shell程序来管理集群 
2 Shell是什么 
Shell是一个命令行解释器#xff…1 为什么要学习Shell编程 
对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shel脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本. 
对于大数据程序员来说,需要编写Shell程序来管理集群 
2 Shell是什么 
Shell是一个命令行解释器它为用户提供了一个向Linux内核发送请求以便裕兴程序的界面系统级程序用户可以用Shell来启动、挂起、停止甚至是编写一些程序。 3 Shell脚本的执行方式 
1sh脚本文件格式要求 
a.在内容的最前面以#!/bin/bash 开头 
#!/bin/bash 
b.脚本需要有可执行权限 
如创建一个hello.sh脚本 2脚本的常用执行方式 
a.方式1 
首先要赋予xx.sh脚本的x权限chmod 744 myShell.sh 
chmod ux hello.sh 
执行脚本./myShell.sh 
./hello.sh 
b.方式2sh脚本 
说明不用赋予x权限直接执行即可 
sh hello.sh 4 shell的变量 
1shell变量的介绍 
Linux Shell的变量分为系统变量和用户自定义变量 
系统变量$HOME、$PWD、$SHELL、$USER等等显示当前shell中所有变量set指令 
set 
2shell变量的自定义 
基本语法 
定义变量 
//等号两边不能有空格
变量值 
撤销变量 
unset 变量 
声明静态变量 
//注意静态变量不能撤销set
readonly 变量 
如 3定义变量的规则 
变量名称可以由字母、数字和下划线组成但是不能以数字开头等号两侧不能有空格变量名称一般习惯为大写 
4将命令的返回值赋给变量 
反引号,表示执行里面的指令并将结果赋值给定义的变量 
//表示执行data指令并将data指令执行的结果赋值给变量A
Adate 
$()等价于 
Adate
等价于
A$(date) 
如 5设置环境变量 
基本语法 
将shell变量输出为环境变量全局变量 
export 变量名变量值 
修改全局/环境变量后需要刷新配置文件才可以生效 
让修改后的配置文件信息立即生效 
source 配置文件 
查询环境变量的值 
echo $变量名 
如 6多行注释 
:!需要注释的内容
! 
7位置参数变量 
当我们执行一个shell脚本时如果希望获取到命令行的参数信息就可以使用到位置参数变量。比如 ./myshell.sh 100 200这个就是一个执行shell的命令行可以在myshell脚本中传参100200。 
基本语法 
//n为数字$0代表命令本身$1-$9代表第一到第九个参数10以上的参数需要用大括号包含如${10}
$n//这个变量代表命令行中所有的参数$*把所有的参数看成一个整体
$*//这个变量也代表命令行中所有的参数不过$把每个参数区分对待
$//这个变量代表命令行中所有参数的个数
$# 
如 8预定义变量 
shell设计者事先已经定义好的变量可以直接在shell脚本中使用 
基本语法 
//当前进程的进程号PID
$$//后台运行的最后一个进程的进程号PID
$!//最后一次执行的命令的返回状态。如果这个变量的值为0证明上一个命令正确执行如果这个变量的值为非0具体是哪个数由命令自己来决定则证明上一个命令执行不正确。
$?//后台运行在脚本文件后面加上  即是进行后台运行
脚本文件.sh  5 运算符 
1算术运算符 
在Shell中进行各种运算操作 
语法 
$[运算式]
或
$((运算式))
或
expr m  n 
注意 
expr m  n注意expr运算符间要有空格expr m - nexpr \* / %乘除取余 
如 2比较运算符 
字符串类型比较 
字符串比较 
整数类型比较 
-lt小于-le小于等于-eq等于-gt大于-ge大于等于-ne不等于 
6 条件判断 
1基本语法 
[ condition ] 
[ condition ]注意condition前后有空格非空返回true可使用$?验证0为true1为false 
2字符串比较判断 
如判断ok是否等于ok等于输出相等 
if [ ok  ok ]
thenecho 相等
fi 3数值比较判断 
如判断12是否大于9大于输出大于 
if [ 12 -gt 9 ]
thenecho 大于
fi 
4按照文件权限进行判断 
-r有读的权限-w有写的权限-x有执行的权限 
如判断是否对a.txt有写的权限有写的权限会输出有写的权限 
if [ -w a.txt ]
thenecho 有写的权限
fi 
其他同理 
5按照文件类型进行判断 
-f文件存在并且是一个常规的文件-e文件存在-d文件存在并且是一个目录 
如判断a.txt文件是否存在存在在控制台输出文件存在 
if [ -e a.txt ]
thenecho 文件存在
fi 
其他同理 
7 流程控制 
1if语句 
基本语法 
单分支 
if [ 条件判断式 ]
then程序
fi 
多分支 
if [ 条件判断式 ]
then程序elif [ 条件判断式 ]
then程序
fi 
2case语句 
基本语法 
case $变量名 in
“值1”)
变量匹配值1则执行这里
;;“值2”)
变量匹配值2则执行这里
;;…省略其他分支…*)
如果变量的值都不匹配则执行这里
;;
esac 
3for循环 
基本语法1 
for 变量 in 值1 值2 值3…
do执行的代码
done 
基本语法2 
for ((初始值;循环控制条件;变量变化))
do执行的代码
done 
案例1循环输出填写的参数 
for $A in $
doecho $A
done 案例2求和求1-10相加的总和 4while循环 
基本语法1 
while [ 条件判断式 ]
do执行的程序
done 
注意 [ 条件判断式 ] []和里面的条件判断式之间有空格 
8 read读取控制台的输入 
基本语法 
read [选项] (参数) 
选项 
-p指定读取值时的提示符-t指定读取值时等待的时间秒如果没有在指定的时间内输入就不再等待了。 
参数 
变量指定读取值的变量名 
案例读取控制台输入的一个NUM值要求在10秒输入10不输入就默认退出 
read -p 请输入一个数字 -t 10s  NUM
echo $NUM 9 函数 
1系统函数 
basename函数 
返回完整路径最后/的部分常用于获取文件名 
语法 
basename [pathname] [suffix] 
basename命令会删掉所有的前缀包括最后一个/选项suffix为后缀如果suffix被指定了basename会将pathname或string中的suffix去掉 
案例1 
basename /aa/bb/cc/a.txt 
得到a.txt字符串 案例2 
basename /aa/bb/cc/a.txt .txt 
得到去掉后缀的文件名 dirname函数 
返回完整路径最后/的前面的部分常用于返回路径部分 
语法 
dirname 文件绝对路径 
从给定的包含文件名的绝对路径中返回目录部分 
案例 
dirname /aa/bb/cc/a.txt 
得到路径/aa/bb/cc 2自定义函数 
基本语法 
function 函数名(){执行语句[return int;] //有返回值的时候
} 
调用函数语法 
函数名 参数 
如编写一个函数计算两个数的和 10 Shell编程综合案例 
1需求分析 
每天凌晨210备份数据库atguiguDB到/data/backup/db备份开始和备份结束能够给出相应的提示信息备份后的文件要求以备份时间为文件名并打包成.tar.gz的形式比如2018-03-12_230201.tar.gz在备份的同时检查是否有10天前备份的数据库文件如果有就将其删除。 
2实现流程 
实现流程如下 
先创建一个shall.sh脚本文件用于实现数据库的备份和备份文件的删除以及提示使用crond定时器来定时调用该脚本文件 
3实现 
编写脚本文件 
先编写脚本文件mysql_rjx.sh 
//进入到/sbin目录
cd /sbin//创建并编辑.sh脚本文件
vim mysql_rjx.sh 
编辑脚本文件内容 
#!/bin/bash#备份目录
BACKUP/data/backup/db
#获取当前时间
DATETIMEdate %Y-%m-%d_%H%M%S
echo $DATETIME#数据库访问地址
HOSTlocalhost
#数据库用户名
DB_USERroot
#数据库密码
DB_PWrjx666aaa
#需要备份的数据库
DATABASErjxedu#创建备份目录,如果目录不存在就创建
if [ ! -d $BACKUP/$DATETIME ]
thenmkdir -p $BACKUP/$DATETIME
fi#开始备份数据库
mysqldump -u$DB_USER -p$DB_PW --host$HOST -q -R --databases $DATABASE | gzip  $BACKUP/$DATETIME/$DATETIME.sql.gz#将文件打包为.tar.gz格式
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME#删除.sql.gz的文件及其父目录
rm -rf $DATETIME#删除10天前的备份文件
find $BACKUP -atime 10 -name *.tar.gz -exec rm -rf {} \;
echo 备份数据库$DATABASE 成功 
创建定时器执行脚本文件 
crontab -e
并编辑
30 2 * * * /usr/sbin/mysql_rjx.sh 
示意图 指令解释 
#开始备份数据库
mysqldump -u$DB_USER -p$DB_PW --host$HOST -q -R --databases $DATABASE | gzip  $BACKUP/$DATETIME/$DATETIME.sql.gz #删除10天前的备份文件
find $BACKUP -atime 10 -name *.tar.gz -exec rm -rf {} \;