#################适用于CentOS6##################

#!/bin/bash
###############################################
# .测试
echo "hello world"
###############################################
# .常用系统变量
echo "user=$USER"
echo "path=$PATH" # 要执行上面的语句有两种方式
# 方式1:给用户赋予该脚本的可执行权限
# chmod 文件名(此处是helloworld.sh)
# 然后 在该文件所在目录下./文件名或者使用该文件的绝对路径执行即可 # 方式2:直接采用sh 文件名执行
################################################################################
# .定义一个变量,切记,不可有空格!!!!!!!!!!!
a=
echo a="$a" # .1注销该变量
unset a
echo a="$a" # .2声明静态变量: readonly变量,注意:不能unset
readonly b=
echo b="$b"
# • 定义变量的规则
# ) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
# ) 等号两侧不能有空格
# ) 变量名称一般习惯为大写
# • 将命令的返回值赋给变量
# ) A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量A
result=`ls -l /home`
echo result="$result"
# ) A=$(ls -la) 等价于反引号
MY_DATE=$(date)
echo mydate="$MY_DATE" # .3设置环境变量(一般在/etc目录下的profile文件中)
# 基本语法
# ) export 变量名=变量值 (功能描述:将shell变量输出为环境变量)
# ) source 配置文件 (功能描述:让修改后的配置信息立即生效)
# ) echo $变量名 (功能描述:查询环境变量的值) # .4位置参数变量
# 介绍
# 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
# 比如 : ./myshell.sh , 这个就是一个执行shell的命令行,可以在myshell 脚本中获取到参数信息
# 基本语法
# $n (功能描述: n为数字, $0代表命令本身, $-$9代表第一到第九个参数,十以上的参数,十以上的参
# 数需要用大括号包含,如${})
# $* (功能描述:这个变量代表命令行中所有的参数, $*把所有的参数看成一个整体)
# $@(功能描述:这个变量也代表命令行中所有的参数, 不过$@把每个参数区分对待)
# $#(功能描述:这个变量代表命令行中所有参数的个数)
# 举例如下:获取到各个参数
echo "$0 $1 $2"
echo "$*"
echo "$@"
echo "参数个数是: length of the params are:$#"
# 测试方式是: ./文件名 参数1 参数2 参数3 # .5预定义变量
# 基本介绍
# 就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用
# 基本语法
# $$ (功能描述:当前进程的进程号(PID))
# $! (功能描述:后台运行的最后一个进程的进程号(PID))
# $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正
# 确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
echo "当前进程的进程号是$$"
# 后台运行某文件的方式是: ./a.sh &
echo "后台运行的最后一个进程的进程号是:$!"
echo "最后一次的执行命令是否成功: $?"
###########################################################
# .shell脚本中的运算符
# .1基本语法
# ) “$((运算式))”或“$[运算式]”
# ) expr m + n
# 注意expr运算符间要有空格
# ) `expr m - n`
# ) expr \*, /, % 乘,除,取余 # • 应用实例
# 案例1: 计算(+) X4的值
plus=$(((+)*))
echo "plus=$plus"
plus1=$[(+)/]
echo "plus1=$plus1"
plus2=`expr + \* `
echo "plus2=$plus2"
# 案例2:请求出命令行的两个参数[整数]的和
plus3=$[$+$]
echo "plus3=$plus3"
#########################################################
# .条件判断
# 判断语句
# • 基本语法
# [ condition ](注意condition前后要有空格)
# 非空返回true,可使用$?验证(0为true, >1为false)
# .1应用实例
# [ hello ] 返回true
# [] 返回false
# [condition] && echo OK || echo notok 条件满足,执行后面的语句 # .2常用判断条件
# ) 两个整数的比较
# = 字符串比较
# -lt 小于
# -le 小于等于
# -eq 等于
# -gt 大于
# -ge 大于等于
# -ne 不等于
# ) 按照文件权限进行判断
# -r 有读的权限
# -w 有写的权限
# -x 有执行的权限
# )按照文件类型进行判断
# -f 文件存在并且是一个常规的文件
# -e 文件存在
# -d 文件存在并是一个目录
# ) 应用实例
# 案例1: "ok"是否等于"ok"
# 判断语句:
if [ "ok" = "ok" ]
then
echo "equal"
fi
# 案例2: 23是否大于等于22
if [ -gt ]
then
echo "大于"
fi
# 判断语句:
# 案例3: /root/shell/aaa.txt 目录中的文件是否存在
# 判断语句:
if [ -e /home/zhang/shell/a.sh ]
then
echo "文件存在"
fi # .3流程控制之-----if 判断
# • 基本语法
# if [ 条件判断式 ];then
# 程序
# fi
# 或者
# if [ 条件判断式 ]
# then
# 程序
# elif [条件判断式]
# then
# 程序
# fi
# 注意事项:() [ 条件判断式 ],中括号和条件判断式之间必须有空格 () 推荐使用第二种方式
# • 应用实例
# 案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出 "及格了",如果小于
# ,则输出 "不及格"
if [ $ -ge ]
then
echo "及格了"
elif [ $ -lt ]
then
echo "不及格"
fi # .4流程控制之-----case语句
# • 基本语法
# case $变量名 in
# "值1")
# 如果变量的值等于值1,则执行程序1
# ;;
# "值2")
# 如果变量的值等于值2,则执行程序2
# ;;
# …省略其他分支…
# *)
# 如果变量的值都不是以上的值,则执行此程序
# ;;
# esac
# • 应用实例
# 案例1 :当命令行参数是 时,输出 "周一", 是2 时,就输出"周二", 其它情况输出 "other"
case $ in
"")
echo "周一"
;;
"")
echo "周二"
;;
*)
echo "other"
;;
esac # .5流程控制之-----for循环
# • 基本语法1
# for 变量 in 值1 值2 值3…
# do
# 程序
# done
# • 应用实例
# 案例1 :打印命令行输入的参数
for i in "$*"
do
echo "=========$i========="
done
for i in "$@"
do
echo "---------$i---------"
done
# • 基本语法2
# for (( 初始值;循环控制条件;变量变化 ))
# do
# 程序
# done
# • 应用实例
# 案例1 : 从1加到100的值输出显示 [这里可以看出$* 和 $@ 的区别]
sum=
for (( i=;i<=;i++ ))
do sum=$[$sum+$i]
done
echo "sum=$sum" # .6流程控制之-----while循环
# • 基本语法1
# while [ 条件判断式 ]
# do
# 程序
# done
# • 应用实例
# 案例1 :从命令行输入一个数n,统计从 +..+ n 的值是多少?
sum1=
j=
while [ $j -le $ ]
do
sum1=$[$sum1+$j]
j=$[$j+]
done
echo "sum1=$sum1" ################################################################################
.read读取控制台输入
# 基本语法
# read(选项)(参数)
# 选项:
# -p:指定读取值时的提示符;
# -t:指定读取值时等待的时间(秒) ,如果没有在指定的时间内输入,就不再等待了。。
# 参数
# 变量:指定读取值的变量名
# 应用实例
# 案例1: 读取控制台输入一个num值
read -p "请输入一个数字no1=" no1
echo "你输入的数数字no1是$no1"
# 案例2: 读取控制台输入一个num值,在10秒内输入。
read -t -p "请在10秒内输入一个数字no2=" no2
echo "你输入的数字no2是$no2" ################################################################################
# .函数
# .1系统函数
# 7.1. basename基本语法
# 功能:返回完整路径最后 / 的部分,常用于获取文件名
# basename [pathname] [suffix]
# basename [string] [suffix] (功能描述: basename命令会删掉所有的前缀包括最后一个(‘/’)
# 字符,然后将字符串显示出来。
# 选项:
# suffix为后缀,如果suffix被指定了, basename会将pathname或string中的suffix去掉。
# • 应用实例
# 案例1:请返回 /home/aaa/test.txt 的 "test.txt" 部分
basename /home/aaa/test.txt
basename /home/aaa/test.txt .txt # 7.1. dirname基本语法
# 功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
# dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),
# 然后返回剩下的路径(目录的部分))
# • 应用实例
# 案例1:请返回 /home/aaa/test.txt 的 /home/aaa
dirname /home/aaa/test.txt # .2自定义函数
# • 基本语法
# [ function ] funname[()]
# {
# Action;
# [return int;]
# }
# 调用直接写函数名: funname [值]
# • 应用实例
# 案例1: 计算输入两个参数的和, getSum
function getSum(){
s=$[$n1+$n2]
echo "$s"
}
read -p "请输入一个数字n1=" n1
read -p "请输入一个数字n2=" n2
# 调用函数
getSum $n1 $n2
# .需求分析
# ) 每天凌晨 : 备份 数据库 atguiguDB 到 /data/backup/db
# ) 备份开始和备份结束能够给出相应的提示信息
# ) 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:
# --12_230201.tar.gz
# ) 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
###################################step1:脚本文件编写:放在/usr/sbin/mysql_db.sh文件中###############################
#完成数据库的定时备份。
#备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y_%m_%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME} echo "=======开始备份========"
echo "=======备份的路径是 $BACKUP/$DATETIME.tar.gz" #主机
HOST=localhost
#用户名
DB_USER=root
#密码
DB_PWD=root
#备份数据库名
DATABASE=atguiguDB
#创建备份的路径
#如果备份的路径文件夹存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
#执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATABASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
#打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
#删除临时目录
rm -rf $BACKUP/$DATETIME #删除10天前的备份文件
find $BACKUP -mtime + -name "*.tar.gz" -exec rm -rf {} \;
echo "=====备份文件成功==========="
###################################step2:调用定时任务mysql_db.sh文件中###############################
crontab -e命令进入,然后i键编辑
10 2 * * * /usr/sbin/mysql_db.sh
esc键退出编辑,:wq保存并退出即可
 

linux之shell编程初步的更多相关文章

  1. 第5天(半天)【shell编程初步、grep及正则表达式】

    第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...

  2. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  3. Linux下Shell编程

    Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户 ...

  4. 【Hadoop离线基础总结】linux的shell编程

    linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...

  5. linux下shell编程示例-获取进程id

    今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...

  6. linux中shell编程

    shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...

  7. linux之shell编程基本语法

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...

  8. Linux学习——shell编程之变量

    shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...

  9. 3. Linux的shell编程

    Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...

随机推荐

  1. J2EE项目在weblogic下的改动

    1.struts所有配置文件放到classes根目录下 2〉java.lang.ClassCastException:weblogic.xml.jaxp.RegistryDocumentBuilder ...

  2. qt在动态库里面加载widget的例子

    testDll和testExe项目 备注:windows下dll内不需要new QApplication, linux和mac下面需要在动态库里面new QApplication testdll.h ...

  3. "废物利用"也抄袭——废旧喷墨打印机和光驱DIY"绘图仪"

    很长时间没有写博客,因为各种各样的事情占去大块时间,只有零碎时间偶尔在CSDN逛逛也偶尔回几个帖子.很久以前就看到一些光驱DIY雕刻机之类的,很是向往,最近这几天得闲就TB了一套Arduino UNO ...

  4. C#操作MySql数据库帮助类(Dapper,T-Sql)

    using System.Text; using MySql.Data.MySqlClient; using System.Data; using Dapper; using System.Refle ...

  5. (转)Inno Setup入门(十六)——Inno Setup类参考(2)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17250967 这里将接着在前面的基础上介绍如何在自定义页面上添加按钮 ...

  6. Linux:WebServer(Nginx 虚拟主机配置与伪静态实现)

    ps + 查看方式  |  grep  +  服务/端口/软件等:查看状态: 一.基本操作 Nginx 多用于商业系统: 一个端口只能被一个服务使用: Nginx 可以同时监听多个端口,也就是配置时, ...

  7. 基于python的测试框架behave----context

    使用behave时,每一步对应的方法都需要参数context,那么context是什么,为什么都需要传这个对象? 在所有用例中的context都是behave.runner.Context类的一个实例 ...

  8. Windbg查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    https://www.cnblogs.com/startpoint/p/4194052.html https://www.cnblogs.com/lyl6796910/p/7613664.html ...

  9. Oracle调优之buffer pool相关

    一个oracle block与data buffer中的一个buffer对应.用户进程(server process)负责读取磁盘上的block到data buffer cache中,DEWn进程负责 ...

  10. jstack来分析linux服务器上Java应用服务性能异常

    使用jdk自带的jstack来分析linux服务器上应用服务性能异常: 1.top查找出哪个进程消耗的系统资源情况 [op1@jira ~]$ top top - 19:23:43 up 22 day ...