- 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是任务调度器
# 首先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
# pic2
现在开始我自己写个脚本
运行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
日常积累:
需求:
解答: