【Shell】脚本语言shell学习

  • shell是什么?(๑•̀ㅂ•́)و✧加油

可以去调用指令。shell是一个命令行解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序。

A=100
echo "A=$A"  # 输出自定义变量
  • 一个综合案例

编写一个shell脚本,完成以下任务

1)每天凌晨2:10备份数据库atguiguDS到/data/backup/db

2)备份开始和备份结束能够给出相应的提示信息

3)备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2019-05-15_20000.tar.gz

4)在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除

思路分析:crond是任务调度器

【Shell】脚本语言shell学习_第1张图片

# 首先cd到 /usr/sbin/ 的路径下
# 创建 vim mysql_db_backup.sh
# 以下是mysql_db_backup.sh中的内容

#!/bin/bash
# 完成数据库的备份
# 备份的路径
BACKUP=/data/backup/db
# 获取当前的时间作为文件名
DATETIME=$(data +%Y_%m_%d_%H%M%S)
# 输出变量调试
echo ${DATETIME}

echo "======开始备份======"
echo "=====备份的路径是 $BACKUP/$DATETIME.tar.gz"

# 主机
HOST=localhost
# 用户名
DB_USER=root
# 密码
DB_PWD=root
# 备份数据库名
DATEBASE=atguiguDB
# 创建备份的路径
# 如果备份的路径目录存在,就使用,否则就创建
[ ! -d "$BACKUP/$DATETIME" ] && mkdir -p "$BACKUP/$DATETIME"
# 执行mysql的备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PWD} --host=$HOST $DATEBASE | gzip > $BACKUP/$DATETIME/$DATETIME.sql.gz
# 准备将zip压缩到哪里去>"指定的压缩路径"

# pic-1
# 切换备份路径,打包备份文件
cd $BACKUP
tar -zcvf $DATETIME.tar.gz $DATETIME
# 删除临时目录
rm -rf ${BACKUP/DATETIME}

# 删除十天前的备份文件
find $BACKUP -mtime +10 -name "*.tar.gz" -exec rm -rf {}\;
echo "====备份文件成功====="

# pic2 
# 

# pic1

【Shell】脚本语言shell学习_第2张图片

# pic2

【Shell】脚本语言shell学习_第3张图片


现在开始我自己写个脚本

运行generate_gt.py和generate_pred.py,产生的目录分别进行压缩gt.zip和submit.zip

运行python script.py -g=gt.zip -s=submit.zip

# first try ~ ~ ~
#!/usr/bin/env bash
WORKSPACE=.
find $WORKSPACE -name "submit" -exec rm -rf {} \;
find $WORKSPACE -name "gt" -exec rm -rf {} \;
find $WORKSPACE -name "*.zip" -exec rm -rf {} \;
python3 ${WORKSPACE}/generate_gt.py
python3 ${WORKSPACE}/generate_pred.py
zip -q ${WORKSPACE}/gt.zip ${WORKSPACE}/gt
zip -q ${WORKSPACE}/submit.zip ${WORKSPACE}/submit
echo ""
#python3 ${WORKSPACE}/script.py –g=$1 –s=$2
python3 ${WORKSPACE}/script.py $1 $2

# 只要运行 bash -x run.sh -g=gt.zip -s=submit.zip
# 原来是python script.py -g=gt.zip -s=submit.zip (单独运行最后一条)

 


leetcode中的一些题目

leetcode 195

给定一个文本文件 file.txt,请只打印这个文件中的第十行。

示例:

假设 file.txt 有如下内容:

Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

你的脚本应当显示第十行:

Line 10
awk 'NR == 10' file.txt (NR在awk中指行号)

sed -n 10p file.txt (-n表示只输出匹配行,p表示Print)

tail -n+10 file.txt|head -1 (tail -n+10表示从第10行开始输出)

leetcode 193

给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个 bash 脚本输出所有有效的电话号码。

你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)

你也可以假设每行前后没有多余的空格字符。

示例:

假设 file.txt 内容如下:

987-123-4567
123 456 7890
(123) 456-7890

你的脚本应当输出下列有效的电话号码:

987-123-4567
(123) 456-7890

 

 

日常积累:

需求:

解答:

你可能感兴趣的:(Linux)