好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库

root@localhost ~ ] # A=AAA [ root@localhost ~ ] # B=BBB [ root@localhost ~ ] # echo $A AAA [ root@localhost ~ ] # echo $A $B AAA BBB 当变量名称容易和紧跟其后的其他字符混淆时,需要使用 ’ { } ‘ 将变量名称括起来
  [ root@localhost ~ ]  # echo $Aaaa 

 [ root@localhost ~ ]  # echo $A aaa 
AAA aaa
 [ root@localhost ~ ]  # echo ${A}aaa 
AAAaaa
 

(3) 赋值时使用引号

  -   双引号:允许通过$符号引用其他变量值   “   ” 
 -   单引号:禁止引用其他变量值,$视为普通字符   ‘ ‘ 
 -   反撇号:命令替换,提取命令执行后的输出结果,也可以使用   $  (  )   代替,可以处理嵌套命令    `  ` 
 (  $  (  )     一般用的更多一点,比   反撇号更加直观,所以一般直接使用$  (  )   ,  不过也可以根据个人喜好  )  
 

(4)从键盘输入内容为变量赋值

格式:read [ -p “提示信息” ] 变量名
示例:
  [ root@localhost ~ ]  #a=class 
 [ root@localhost ~ ]  #b=36 
 [ root@localhost ~ ]  #echo  $a $b 
class 36
 [ root@localhost ~ ]  #echo $aa 
classa
 [ root@localhost ~ ]  #c=class 36 
-bash:  36:未找到命令
 [ root@localhost ~ ]  #c="class 36" 
 [ root@localhost ~ ]  #echo $c 
class 36
 [ root@localhost ~ ]  #class="class $b" 
 [ root@localhost ~ ]  #echo  $class 
class 36     (  $b  = 36 ) 
 [ root@localhost ~ ]  #class2=‘class $b‘ 
 [ root@localhost ~ ]  #echo $class2 
class  $b       `  ( 单引号不引用变量$视为普通字符 )  `  
 
  [ root@localhost ~ ]  #which useradd 
/usr/sbin/useradd
 [ root@localhost ~ ]  #ls -lh `which useradd`    
  `  ( ls -lh  $( which useradd )  也是一样的 )  `  
-rexr-xr-x. 1  root root 135k 8月   9  2020 /usr/sbin/useradd
 [ root@localhost ~ ]  #rpm -qf /usr/sbin/useradd 
shadow-utils-4.6-5.e17.x86_64
 [ root@localhost ~ ]  #rpm -qc shadow-utils-4.6-5.e17.x86_64 
/etc/default/useradd
/etc/login.defs
 [ root@localhost ~ ]  # rpm -qc `rpm -qf `which useradd``   
  `  ( rpm -qc  $( rpm -qf  $( which useradd )) 一样的 )  `  
/etc/default/useradd
/etc/login.defs
 [ root@localhost ~ ]  #read aaa     
  `  ( 使用read给变量aaa赋值 )  `  
/opt/backup    (这个是自己输入的,也就是变量aaa的变量值)
 [ root@localhost ~ ]  #echo $aaa 
/opt/backup
 [ root@localhost ~ ]  # read -p "请指定备份存放目录:" bbb   
  ` (-p会输出指定的提示信息交互式变量) `  
请指定备份存放目录:/opt/backup
 [ root@localhost ~ ]  #echo $bbb 
/opt/backup
 

(5)设置变量的作用范围
- 局部变量与全局变量
局部变量:只在当前shell环境中有效

变量名=变量值
全局变量:在所有shell环境中有效 (有两种全局变量的格式)
格式一:export 变量名 … (把已经创建好的变量变成全局变量)
格式二:export 变量名=变量值 … (创建的时候直接创建全局变量)
———— 两种格式可以混合使用 ————
   [ root@localhost ~ ]  # echo  "$A  $B" 
 aaa  bbb               `  ( A = aaa  B = bbb )  `  
  [ root@localhost ~ ]  # export A  
   ` (导出A为全局变量) `  
  [ root@localhost ~ ]  # bash   
   `  ( 换一个shell环境 )  `  
  [ root@localhost ~ ]  # echo "$A $B" 
 aaa       `  ( 因为A是全局变量B不是,所以只会显示A的变量值 )  `  
 

(6)整数变量的运算

格式:expr 变量1 运算符 变量2 运算符 变量3 …

(7)常用运算符

加法运算: + 减法运算: - 乘法运算: * 除法运算: / 求模(取余)运算: % 命令嵌套: $() 解决变量名混淆问题: ${} 实现整数的混合运算: $(())

变量运算示例

  [ root@localhost ~ ]  # x=3 
 [ root@localhost ~ ]  # echo $x 
3
 [ root@localhost ~ ]  # y=4 
 [ root@localhost ~ ]  # expr $x + $y 
7
 [ root@localhost ~ ]  # expr $x % $y 
3
 [ root@localhost ~ ]  # expr $y % $x 
1
 [ root@aaa ~ ]  # B="$(expr $A + 1 )"  
  ` (可以这样去定义变量的算数,中间有空格) `  
 [ root@aaa ~ ]  # A=0 
 [ root@aaa ~ ]  # echo "$(expr $A + $B )" 
1
 

二、特殊的shell变量

(1)环境变量

由系统提前创建,用来设置用户的工作环境 配置文件: /etc/profile 、 ~/.bash_profile (家目录下的)
查看当前环境变量
env

(2)常见的环境变量

PWD 、 PATH USER、SHELL、HOME
  [ root@localhost ~ ]  # echo $PATH 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:
/usr/bin:/root/bin
 [ root@localhost ~ ]  # PATH="$PATH:/root"    
  ` (改变系统变量) `  
 [ root@localhost ~ ]  # echo $PATH 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:
/usr/bin:/root/bin:/root
  `  ( 在末尾加了:root )  `  
 

示例:制作用户登录的欢迎脚本

  [ root@localhost ~ ]  # vim /opt/welcome.sh 
 #!/bin/bash 
 echo   "用户  $USER  
 您好!欢迎你登录!" 
 [ root@localhost ~ ]  # chmod +x /opt/welcome.sh  
 [ root@localhost ~ ]  # vim /etc/profile 
在文件末尾添加
 source  /opt/welcome.sh   (每次登录时执行脚本)
 [ root@localhost ~ ]  # su - ly 
上一次登录:一 7月  1 11:19:51 CST 2019pts/0 上
用户 ly 
 您好!欢迎你登录!
 [ ly@localhost ~ ] $ 
 

(2)位置变量

表示为 $n ,n 为 1 ~ 9之间的数字
[root@localhost ~]# ./myprog.sh one two three four five six
$1,第1个位置参数 (如one 就是第一个位置参数)
$2,第2个位置参数 (如two就是第二个位置参数)
$6,第6个位置参数 (如six就是第六个位置参数)
$0 为当前脚本的位置,即当前脚本

(3)预定义变量

$#:命令行中位置变量的个数 (即脚本后面跟的位置变量的总和) $*:所有位置变量的内容 (即脚本后面跟的所有的位置变量的名称) $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错 (一般都输出1) $0:当前执行的进程/程序名 (即当前脚本名)

预定义变量与特殊变量的结合示例

  [ root@localhost ~ ]  # vim mybak.sh 
 #!/bin/bash 
A = beifen-  $(  date  +%F )  .tgz
 tar  zcf  $A   $*   &  >  /dev/null         ( tar zcf 使用归档 ) 
 echo   "已执行  $0  脚本," 
 echo   "共完成  $#  个对象的备份" 
 echo  “具体内容包括:  $* ” 
 [ root@localhost ~ ]  # ./mybak.sh  /etc/passwd  /etc/shadow  
已执行 ./mybak.sh 脚本,
共完成 2 个对象的备份
具体包括:/etc/passwd /etc/shadow
 
  [ root@localhost ~ ]  #vim myprog.sh 
 #!/bin/bash 
 # 这是一个显示位置变量和预定义变量的脚本 
 # 计算求和 
A =   $(  expr  $1 + $2 + $3 + $4  )  
 echo   "命令行中位置变量的个数:  $# " 
 echo   "所有位置变量的内容: $* " 
 echo   "第2个位置变量为: $2  " 
 echo   "当前脚本的名称: $0 " 
 echo   "这4个数字的和为: $A " 
 [ root@localhost ~ ]  # chmod +x myprog.sh   (给可执行权限) 
 [ root@localhost ~ ]  #./myprog.sh 10 20 30 40     
 [ root@localhost ~ ]  #./myprog.sh 10 20 30  
 [ root@localhost ~ ]  #./myprog.sh 10 20 30 40 50 
 




(发现当脚本后的位置变量不够或者多的话,有些是无法计算,或者无法显示的)

shell脚本与计划任务

一、脚本应用思路

(1)确定命令操作(设计并执行任务)
mysql数据库服务器 192.168.10.1
(得先安装mysql 数据库,或者mairadb也可以,mysql用源码包,mairadb用本地光盘yum源就可以)

  [ root@localhost ~ ]  # netstat -anput | grep 3306   
  `  ( 看一下mysql是否开启 )  `  
 [ root@localhost ~ ]  # mysql -uroot -p123     
  ` (登录mysql,这里使用-p123密码登录,先设置一下密码在登陆) `  
mysql >  create database test1 ; 
mysql >  create database test2 ;       ` 创建两个库一个test1,一个test2 `  
mysql >  create table test1.student ( id int not null,name varchar ( 8 ))  ;     
mysql >  create table test2.student ( id int not null,name varchar ( 8 ))  ;     ` 分别在两个库里写下表 `  
mysql >  grant all on test1.* to  ‘test1‘ @ ‘192.168.10.%‘  identified by  ‘123‘  ; 
mysql >  grant all on test2.* to  ‘test2‘ @ ‘192.168.10.%‘  identified by  ‘123‘  ;       ` 分别赋权给两个库相应的mysql用户 `  
mysql >  flush privileges ;     ` 更新数据库的用户数据与权限 `  
mysql >   exit 
 

客户机 192.168.10.2 (直接安装mariadb)

  [ root@localhost ~ ]  # yum -y install mariadb      
 [ root@localhost ~ ]  # mysql -utest1 -p123 -h 192.168.10.1 
先远程登录服务器看能不能登录
 [ root@localhost ~ ]  # mysqldump -utest1 -p123 -h 192.168.10.1 test1 > test1.sql 
远程数据库进行备份
 [ root@localhost ~ ]  # ll test1.sql  
 [ root@localhost ~ ]  # cat test1.sql  
查看是否备份成功
 

利用shell脚本进行远程备份

(1)使用不同用户对数据库 test1、test2进行远程备份
(2)每天 2:30执行备份
(3)每个库备份为独立的sql文件,压缩为“.tar.gz”格式的文件,文件中嵌套执行备份时的日期和时间

tar zcf *.tar.gz 源文件名称

date +%F-%H:%M (时间变量)

mysqldump -u用户名 -p密码 -h 目标主机 --databases 数据库名称 > *.sql

/usr/bin/tar zcf bf-$(date +%F-%H:%M:%S).tar.gz test1.sql
制作脚本

  [ root@localhost opt ]  # vim ly.sh  
 #!/bin/bash 
  ` 用户名 `  
user1 =  "test1" 
user2 =  "test2" 
  ` 密码 `  
pass1 =  "123" 
pass2 =  "123" 
  ` 数据库服务器主机ip `  
data_host =  "192.168.10.1" 
  ` 数据库名称 `  
data1 =  "test1" 
data2 =  "test2" 
  ` 备份名称 `  
dumpfile1 =  " ${data1} .sql" 
dumpfile2 =  " ${data2} .sql" 
  ` 归档名称 `  
file1 =  " ${data1} -  $(  date  +%F-%H-%M-%S )  .tar.gz" 
file2 =  " ${data2} -  $(  date  +%F-%H-%M-%S )  .tar.gz" 
  ` 备份时各参数连接 `  
conn_name1 =  "-u $user1  -p $pass1  -h $data_host  --databases  $data1 " 
conn_name2 =  "-u $user2  -p $pass2  -h $data_host  --databases  $data2 " 
  `  备份数据库 `  
/usr/bin/mysqldump  $conn_name1   >   $dumpfile1 
/usr/bin/mysqldump  $conn_name2    >   $dumpfile2 
  ` 归档 `  
/usr/bin/tar zcf /opt/ $file1    $dumpfile1 
/usr/bin/tar zcf /opt/ $file2    $dumpfile2 
 

设值计划任务 (控制时间,调用任务脚本)

  [ root@localhost ~ ]  # crontab -e    (进入计划任务) 
30 2 * * *    source    /opt/ly.sh     ` (每天的两点半执行脚本) `  
 

Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库

标签:思路   技术   特殊变量   变化   变量赋值   空格   art   $()   需要   

查看更多关于Shell变量的作用、类型,及如何利用脚本配合任务计划远程备份mysql数据库的详细内容...

  阅读:26次