前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >shell学习笔记

shell学习笔记

作者头像
Qwe7
发布2022-03-20 08:04:33
发布2022-03-20 08:04:33
24400
代码可运行
举报
文章被收录于专栏:网络收集网络收集
运行总次数:0
代码可运行

sh上传脚本

首先直接简单介绍一下这个脚本的功能。

1.获取百度统计数据 2.记录上传到github的时间更新内容更新时间 3.更加便捷的上传博客源码到github,一键上传同时也可以自定义commit

直接贴一下源码吧!

sh

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/sh
#sluggard: brqs
#使用前请先在站点根目录新建一个version.txt文本文件
#在txt函数中即可修改初始版本号
echo "==========================================="
echo "       欢迎使用上传脚本!"
echo "==========================================="
function deploy()
{
printf "\033[32mINFO \033[0m 正在上传...请稍后\n"
getdata
git add .
git commit -m "$log"
git push origin main
git pull --rebase origin main
git push origin main
printf "\033[32mINFO \033[0m 上传完毕~~期待下次再见\n"
}
function getdata(){
    printf "\033[32mINFO \033[0m 开始获取百度统计数据\n"
    cd /d/website/hexoblog/source/census/data
    python get.py
    cd /d/website/hexoblog/
    printf "\033[32mINFO \033[0m 百度统计数据获取完成\n"
}
function txt()
{
version=$(awk '{print NR}' version.txt|tail -n1 )
time=$(date "+%Y-%m-%d %H: %M :%S")
echo "3.$version版本更新,日志:$log,更新时间 ${time} " >>version.txt
}
HexoPath=$(cd "$(dirname "$0")"; pwd)
cd ${HexoPath}
echo "[0] 退出上传"
echo "[1] 日常维护"
echo "[2] 开发调试"
echo "[3] 自定义输入"
echo " "
printf "请选择需要的日志内容"
echo " "
printf "选择:"
read answer
if [ "$answer" = "1" ] || [ "$answer" = "" ]; then
log="日常维护"
txt
deploy
else
if [ "$answer" = "2" ]; then
log="开发调试"
txt
deploy
else
if [ "$answer" = "3" ]; then
read  -p "更新日志 > " log
txt
deploy
else
if [ "$answer" = "0" ]; then
printf "\033[32mINFO \033[0m 已取消上传\n"
sleep 1s
exit 0
else
printf "\033[31mERROR \033[0m 输入错误,请返回重新选择...\n"
sleep 1s
exec ${HexoPath}/up.sh
fi
fi
fi
fi

接下来就来简单总结一下写这个脚本过程中学到的东西。

获取当前时间

1)原格式输出

sh

代码语言:javascript
代码运行次数:0
运行
复制
time=$(date)
echo $time #2021年 07月 19日 星期一 11:55:15 CST

2)时间串输出

sh

代码语言:javascript
代码运行次数:0
运行
复制
1 #!bin/bash
2 time=$(date "+%Y%m%d%H%M%S")
3 echo $time #20210719115515

注意:

1、date后面有一个空格,shell对空格要求严格 2、变量赋值前后不要有空格

改写文件

使用shell命令可以很方便的向文本文件中插入一句话

sh

代码语言:javascript
代码运行次数:0
运行
复制
echo 'hello world' > a.txt

这句命令的意思是把echo的返回值写入a.txt中。

插入到末尾

刚才的命令有一个问题,就是不论 a.txt 中有没内容,>这个命令会吧 a 中原有的内容都覆盖。这可能不是你期望的。

如果你用echo 'hello world' >> a.txt。这样新插入的这句话就在 a.txt 的最后一段。

结合变量就可以很容易的实现输出更新时间和更新日志到txt文件的功能.

读取一个文件并插入到另外一个文件

有时候,我们想在一个文件中插入的内容,已经在另外一个文件中事先写好了。这个时候,可以先读取事先写好的文明。

sh

代码语言:javascript
代码运行次数:0
运行
复制
cat hello.txt > world.txt

这个命令就是在读取a,然后把 b 改写成刚刚读取到的内容。你可能会觉得,这不就是复制么,为什么要用>呢。是的,这可以用cp代替。但是下面这个命令就不能用 cp 代替了。

sh

代码语言:javascript
代码运行次数:0
运行
复制
cat hello.txt >> world.txt

Recall:

  1. >帮你把某个命令的返回值写入一个文件
  2. >>帮你把某个命令的返回值插入到某个文件的末尾
  3. 我们可以先读取一个文件,然后用>或者>>,把内容插入到另外一个文件。
读取文件的行数

现在有一个a文件,共有15行,可以使用以下五种方法读取到文件行数。

sh

代码语言:javascript
代码运行次数:0
运行
复制
 awk '{print NR}' a|tail -n1
 awk 'END{print NR}' a
 grep -n "" a|awk -F: '{print '}|tail -n1
 sed -n '$=' a
 wc -l a|awk '{print }'
 cat a |wc -l

我也正是通过这个方法实现version.txt中版本号的增加,将这个命令保存在变量里version=$(awk '{print NR}' version.txt|tail -n1 )调用这个$version变量即可。

获取用户输入

通过read命令实现自定义输入commit的功能,read -p "更新日志 > " log 将输入文本储存在变量里便于后面调用。

read 命令的用法为:

read [-options] [variables]

options表示选项,如下表所示;variables表示用来存储数据的变量,可以有一个,也可以有多个。

optionsvariables都是可选的,如果没有提供变量名,那么读取的数据将存放到环境变量 REPLY 中。

选项

说明

-a array

把读取的数据赋值给数组 array,从下标 0 开始。

-d delimiter

用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。

-e

在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。

-n num

读取 num 个字符,而不是整行字符。

-p prompt

显示提示信息,提示内容为 prompt。

-r

原样读取(Raw mode),不把反斜杠字符解释为转义字符。

-s

静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。

-t seconds

设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。

-u fd

使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

可以利用这个来做一个两次输入密码验证,在指定时间内输入密码。

sh

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/bash
if    
read -t 20 -sp "Enter password in 20 seconds(once) > " pass1 && printf "\n" &&  #第一次输入密码    
read -t 20 -sp "Enter password in 20 seconds(again)> " pass2 && printf "\n" &&  #第二次输入密码    
[ $pass1 == $pass2 ]  #判断两次输入的密码是否相等then    
echo "Valid password"
else    
echo "Invalid password"
fi

另外看到博主越行勤linux 练习shell 编写minecraft服务器启动脚本之后我表示拿来吧你。

2022.02.01更新:

解决jsd凉了之后的图床链接批量更换自用脚本

sh

代码语言:javascript
代码运行次数:0
运行
复制
time=$(date "+%Y-%m-%d")
echo "欢迎使用文本替换脚本" 
echo "正在自动备份,请手动修改备份目录"
cp -r ./source/_posts ../backup/$time
echo "请输入被替换的文本,注意使用转义符\\转义。"
read source
echo "请输入要替换的文本,注意使用转义符\\转义。"
read replace
cd ./_posts
sed -i "s/$source/$replace/g" `grep "$source" -rl ./` 
echo "替换完成请检查QAQ"

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sh上传脚本
    • 获取当前时间
    • 改写文件
    • 插入到末尾
    • 读取一个文件并插入到另外一个文件
    • 读取文件的行数
    • 获取用户输入
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档