(CN) Shell Programming

Shell编程

代码在AllmyCodes/code/shcode

一 shell编程

  1. 定义: Shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序

  2. 脚本格式:#!/bin/bash开头,且需要有可执行权限

  3. 常用的执行方式:

    • chmod u+x xxxx.sh 之后./xxxx.sh
    • sh xxxx.sh不需要加权限就可以执行
  4. shell变量:

    • 系统变量:$HOME, $PWD,$USER

    set 查看shell中所有变量

    • 自定义变量:变量名=值

      撤销变量 unset 变量

      声明静态变量:readonly 变量,不能unset

      image-20220111171528315

  5. 变量定义规则:

    image-20220111171602699

  6. 设置环境:

    基本语法:

    • export 变量名=变量值 将shell变量输出为环境变量
    • source 配置文件 让修改后的配置信息立即生效
    • echo $变量名 查询环境变量的值
  7. shell 脚本的多行注释 :<<! 内容 !

  8. 位置参数变量:

    image-20220111194232947

  9. 预定义变量:

    image-20220111194818622

    image-20220111200042863

  10. 运算符:

image-20220203145220763

  1. 条件判断:

    基本语法:[ condition ] 注意condition前面有空格

    image-20220206150259531

    非空返回true

    image-20220204134027532
  2. 流程控制:

    image-20220204135152356
  3. case 语句:

    image-20220204135635839
  4. for 循环:

image-20220206134055908

  1. while 循环

    image-20220206140137301

  2. read读取控制台输入

    image-20220206140955304

  3. 系统函数

    basename [path] [suffix 后缀] 返回文件名

    常用于获取文件名

    dirname 绝对路径

    返回文件的路径

  4. 自定义函数

    image-20220206141926035

二 综合案例

定时备份数据库

思路:

image-20220206143150807

# Codes

#!/bin/bash

#backup
BACKUP=/data/backup/db

#current Time
DATETIME=$(date +%Y-%m-%d_%H%M%S)

#db addr
HOST=localhost

#db info
DB_USER=root
DB_PW=123456
DB_NAME=testDB

#create the path and file
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"

#backup database
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DB_NAME} | gzip > ${BACKUP}/${DATETIME}/($DATETIME.sql.gz)

#make file into tar.gz
cd ${BACKUP}
tar -zcvf ($DATETIME.tar.gz) ${DATETIME}

#delete the directory been tar.gz
rm -rf ${BACKUP}/${DATETIME}

#delete the backup file made 10 days ago
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;

#output the result
echo "backup done"

#use crontab to execute the script
#input the code below in the commendline
# crontab -e
# 30 2 * * * /mysql_db_backup.sh
Outis Yang
Outis Yang
2024 Undergraduate in Cyberspace Security

My research interests include Internet of Vehicles(IoV), Penetration Testing and Security research.