本篇文章主要是介绍一些 shell 的一些入门知识,引起读者书写 shell ,使用 shell 的兴趣。
在任意位置运行自己的 shell 脚本
在笔者看来,想要 shell 用的好,那使用上必须得方便。ps: 以下操作针对 mac 电脑
在自己的 HOME 目录下面,新建一个 bin 目录,用于放置自己的小脚本。为了方便使用,建议把$HOME/bin
放在你的 PATH 变量(PATH 是一个环境变量,它告诉 shell 在哪里找可执行的文件)里面。这样,你的 shell 命令就可以在全局任意地方使用。
// 进入自己的$HOME 目录
cd
// 创建一个 bin 目录
mkdir bin
// 将 bin 目录添加到 path 里面, 可以写在 .zshrc 或 .bashrc 等 shell 配置文件里面
export PATH=$PATH:$HOME/bin
现在我们就可以在 bin 目录新建我们的脚本了。按照惯例,我们来输出个 hello world
// $HOME 指的是你的家目录
cd $HOME/bin
// 新建一个 hello 文件
touch hello
// 给 hello 文件加上可执行权限
chmod +x hello
接下来我们来写 hello 脚本,脚本内容如下
// 意思是使用 bash 来解析这个文件
// 以指令#!/bin/sh开头的文件在执行时会实际调用/bin/sh程序(通常是Bourne shell或兼容的shell,例如bash、dash等)来执行。这行内容也是shell脚本的标准起始行。
#!/bin/bash
// 在控制台输出 "hello world"
echo "hello world"
写完之后,保存,退出即可。接下来你就可以在任意地方调用这个 hello 命令
当然你也可以指定 node 来这行,很简单, 只需要在脚本第一行指定 node 来解析就行
#!/usr/bin/env node
setTimeout(() => {
console.log('hello');
}, 1000);
当我们有些小需求的时候,就可以很方便的在 bin 文件夹中新建 shell 脚本文件,然后再任意地方去使用它。下面是笔者几个常见的使用 shell 的场景
工作中常见的 shell 用法
组合命令
有一些操作需要运行多个命令,我们就可以把多个命令都放在 shell 文件里面。举个例子,比如一些项目我们想快速提交到远程。 我们在 $HOME/bin
里面新建一个文件fgp
#!/bin/bash
git add .
git commit -m 'fast push' -n
git push
这样,我们就可以愉快的在任意位置使用 fgp 快速提交了。
定时执行任务
我们希望定时运行 shell 命令。 需要借助 crontab
比如我们想定时提醒我们自己喝水,先在 bin 文件夹里面写一个 drinking 脚本
#! /bin/bash
osascript -e 'display notification "该喝水了" with title "定时提醒"'
我们给这个文件加上可执行权限,chmod +x drinking
接着我们需要编辑一下 crontab 脚本, 运行 crontab -e
添加一下 30 * * * * sh ~/bin/drinking
crontab 添加规则,可以通过crontab guru这个网站查看, 30 * * * * sh ~/bin/drinking
的意思是每 30 分钟运行一下 drinking 脚本
简单修改一些文件
我们有些时候需要修改一些文件,可能需要使用到 sed , awk 这些原生命令,写法比较复杂,后面有兴趣可以自己研究。我这里推荐的是 jq 这个命令。在一些修改 json 的场景非常好用。
比如我想修改 package.json 的 name 字段为 test , 操作如下:
jq ".name=test" package.json | sponge package.json
sponge 作用是接受管道的输出,并且将输出写入到 package.json 文件中去 , 如果你没有这个命令,需要手动安装一下 brew install jq brew install sponge
本文正在参加「金石计划」