#################适用于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. bzoj 3671 [Noi2014]随机数生成器——贪心(时间复杂度分配)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3671 设 x 为一个点的行号, y 为一个点的列号:原本想着判断一个点能不能选就是看选了的点 ...

  2. 安装xamp之后,appach、mysql等问题的总结

    问题一:无法启动的问题 如果他们无法启动,大多数情况是端口号被占用. 首先就是查看端口号:点击“netstart“按钮查看端口号的使用详情 如果被占用就点击"config”按钮,进行端口号的 ...

  3. 请求MWS报错401:Access Denied

    跑MWS接口,报错: Caught Exception: Access denied Response Status Code: Error Code: AccessDenied Error Type ...

  4. jdk1.8新特性之接口default方法

    众所周知,default是java的关键字之一,使用场景是配合switch关键字用于条件分支的默认项.但自从java的jdk1.8横空出世以后,它就被赋予了另一项很酷的能力——在接口中定义非抽象方法. ...

  5. FPGA设计中的float

    在通常的设计中,不建议使用浮点数计算,因为浮点数计算会消耗FPGA大量的逻辑单元.但很多情况下,又需要使用浮点数进行计算提高精度. 所以需要有合适的方法计算浮点运算. 正常情况下FPGA只能以整形数据 ...

  6. FU-A 分包

    FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法 [原创] RFC3984是H.264的baseline码流在RTP方式下传输的规范,这里只讨论FU-A分包方式,以及从RTP包 ...

  7. python--logging库学习_自我总结---有空完善

    思路: 1.把前面的都封装,然后在测试用例里面调用,每一步测试步骤下面都加一个  logging.info('这个是测试步骤')(可以 亲测) 2.尝试添加到unittest框架里面,看能不能一起使用 ...

  8. appium+python自动化29-toast

    注意 toast要appium1.6.3以上版本才支持,appium1.4的版本就别浪费时间了 Supported Platforms 1.查看appium v1.7版本官方文档 Supported ...

  9. css 定位position总结

    在CSS中,Position 属性经常会用到,主要是绝对定位和相对定位,简单的使用都没有问题,尤其嵌套起来,就会有些混乱,今记录总结一下,防止久而忘之. CSS position 属性值: absol ...

  10. 【POJ】2329 Nearest number - 2(搜索)

    题目 传送门:QWQ 分析 在dp分类里做的,然而并不会$ O(n^3) $ 的$ dp $,怒写一发搜索. 看起来是$ O(n^4) $,但仔细分析了一下好像还挺靠谱的? poj挂了,没在poj交, ...