[ 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数据库的详细内容...