linux之shell编程初步
#################适用于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编程初步的更多相关文章
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- Linux 下shell 编程学习脚手架
linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...
- Linux下Shell编程
Linux的shell编程 1.什么是shell? 当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序. shell就是一个命令行解释器,它为用户 ...
- 【Hadoop离线基础总结】linux的shell编程
linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...
- linux下shell编程示例-获取进程id
今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...
- linux中shell编程
shell编程 1 echo -e 识别\转义符 \a \b \t \n \x十六进制 \0八进制 等等 #!/bin/bash echo -e "hello world" 执行脚 ...
- linux之shell编程基本语法
Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
- 3. Linux的shell编程
Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务.它类似于 DOS 下的 command 和后来的 cmd.exe.Shell 既是一种命令语言,又是一种程序 ...
随机推荐
- 浅谈ecmall插件机制
插件是独立于原系统的程序模块,目的是在不修改原程序的情况下对系统进行扩展,便于修改和管理.目前web开发中大多是使用钩子形式来定义插件, 比较典型的有 wordpress, drupal系统 ecma ...
- JMeter代码小Demo(Java)
一.使用Eclipse进行项目编写 1.使用eclipse,新建项目名字为:TestNumber,包名为:test,类名为:TestNum 2.在JMeter的安装目下下lib/ext中copy2个j ...
- 02 - Unit01:服务器返回数据的json处理+搭建项目环境
服务器返回数据的json处理+搭建项目环境 服务器返回数据的json处理 springMVC JSP响应流程 请求 -->DispatcherServlet -->HandlerMappi ...
- windows 安装redis
git :https://github.com/ServiceStack/redis-windows 备份地址:https://gitee.com/liuq1991v/redis-for-window ...
- java代码-----String数组进行排序。是英文的字符串
总结:主要是方法不同了.是compareTo()方法比较字符串大小 package com.s.x; import java.util.Arrays; public class Jay { publi ...
- Java 五子棋小游戏
package Day8_06; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import ...
- JDK之集合乱序源码分析
在JAVA的JDK中Collections类提供了shuffle方法用来对给定的集合参数进行乱序重排,之前面试也被问到过类似的问题,看了一下JDK的源码实现做个记录 1. 方法签名: Collecti ...
- HTML5 本地存储 [转]
1.sessionStorage 2.localStorage 3.Database Storage 4.globalStorage 5.兼容性 参考文献 本地持久化存储一直是本地客户端程序优于 we ...
- JavaScript数据类型的检测
主要有一下四种方法: 1.typeof 2.instanceof 3.constructor 4.Object.prototype.toString.call() 1.typeof 不能具体细分是什么 ...
- iframe有哪些缺点?
iframe会阻塞主页面的Onload事件: iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载.使用iframe之前需要考虑这两个缺点.如果需要使用ifram ...