셸 변수의 역할 및 유형, 스크립트를 사용하여 작업 계획과 협력하여 mysql 데이터베이스를 원격으로 백업하는 방법

셸 변수의 역할 및 유형

(1) 변수의 역할

  • Linux 시스템의 유연한 관리를위한 특정 매개 변수를 제공합니다. 두 가지 의미가 있습니다.
  • 변수 이름 : 고정 된 이름을 사용하거나 시스템에서 사전 설정하거나 사용자 정의
  • 변수 값 : 사용자 설정 또는 시스템 환경 변화에 따라 변경 가능

(2) 변수의 종류

  • 맞춤 변수 : 사용자가 정의, 수정 및 사용
  • 환경 변수 : 시스템에 의해 유지되고 작업 환경을 설정하는 데 사용됩니다.(改变系统环境的变量)
  • 위치 변수 : 명령 줄을 통해 스크립트 프로그램에 매개 변수 전달(可以理解为脚本后面跟的字段)
  • 사전 정의 된 변수 : 직접 수정할 수없는 Bash에 내장 된 변수 유형

하나, 맞춤 변수

(1) 새 변수 정의

  • 형식 : 변수 이름 = 변수 값
  • 변수 이름은 문자 또는 밑줄로 시작하며 대소 문자를 구분합니다. 모두 대문자를 사용하는 것이 좋습니다 (소문자는 영향을받지 않음).

(2) 변수 값보기

  • 형식 : echo $ 변수 이름
  • 변수 삭제 : unset 변수 이름의
    예 :
[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 "prompt information"] 변수 이름의
    예 :
[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) 변수 범위 설정
- 局部变量与全局变量
지역 변수 : 현재 쉘 환경에서만 유효합니다.

  • 변수 이름 = 변수 값
    전역 변수 : 모든 셸 환경에서 유효 (有两种全局变量的格式)
    형식 1 : 변수 이름 내보내기 ... (把已经创建好的变量变成全局变量)
    형식 2 : 변수 이름 내보내기 = 변수 값 ... (创建的时候直接创建全局变量)
    ———— 두 형식은 혼합 가능 ————
 [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

두 개의 특수 쉘 변수

(1) 환경 변수

  • 由系统提前创建,用来设置用户的工作环境
  • 구성 파일 : / etc / profile, ~ / .bash_profile (家目录下的)
    현재 환경 변수보기
    env

(2) 공통 환경 변수

  • PWD, 경로
  • 사용자, 쉘, 홈
[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, 첫 번째 위치 매개 변수 (如one 就是第一个位置参数)
    $ 2, 두 번째 위치 매개 변수 (如two就是第二个位置参数)
    $ 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

여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
(发现当脚本后的位置变量不够或者多的话,有些是无法计算,或者无法显示的)

셸 스크립트 및 예약 된 작업

1. 스크립트 애플리케이션 아이디어

(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 
查看是否备份成功

쉘 스크립트를 사용한 원격 백업

(1) 다른 사용자를 사용하여 test1 및 test2 데이터베이스를 원격으로 백업합니다.
(2) 매일 2:30에 백업을 수행합니다.
(3) 각 라이브러리를 ".tar.gz"형식의 파일로 압축 된 별도의 SQL 파일로 백업합니다. , 중첩 된 백업이 수행 된 날짜 및 시간 파일

  • tar zcf * .tar.gz 소스 파일 이름

  • 날짜 + % F- % H : % M (时间变量)
    여기에 사진 설명 삽입

  • mysqldump -u 사용자 이름 -p 암호 -h 대상 호스트-데이터베이스 데이터베이스 이름> * .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   `(每天的两点半执行脚本)`

추천

출처blog.csdn.net/rzy1248873545/article/details/110309988