Daniel Liu

I Need You To Tell Me That I’m A Good Person.

脚本

2021年3月18日

脚本

理解脚本

如果你打开一本JavaScript教程,那么很可能在第一章就看到这句话:

JavaScript 是一门动态类型、面向对象的脚本语言

其实脚本原本来自戏剧舞台,比如下面这个脚本:

公馆一室内
王妈:(小心翼翼地)小姐,您还是得注意身子,就吃点东西吧。
鸡小姐:(把碗砸在地上)不吃,我就是不吃。
(王妈下)

脚本主要由人物对话和舞台提示组成。演员和道具组只需要按照脚本说的做即可

编程领域的脚本也是类似的,计算机只要照着脚本上说的做即可,比如下面这个脚本:

1
2
3
4
5
cd ~/Desktop
mkdir demo
cd demo
echo "hi">index.html
cd ~/Desktop

所以说,脚本就是给计算机照着做的。这是我们对「脚本!的一个感性认识。接下来我们写一个脚本。

写一个脚本

  1. 找个地方新建文件,后缀随意,一般来说脚本的后缀是 .sh,但是我偏要把后缀写成 .txt。我喜欢把脚本放在 ~/local 目录里。(我知道你没有这个目录,创建一下这个目录就行啦)

    1
    2
    3
    mkdir ~/local
    cd ~/local
    touch demo.txt
  2. 编辑 demo.txt,内容如下:

    1
    2
    3
    4
    mkdir demo
    cd demo
    mkdir css js
    touch index.html css/style.css js/main.js
  3. (Windows 用户请跳过这一步)给 demo.txt 添加执行权限 chmod +x demo.txt

  4. 在任意位置执行 sh ~/local/demo.txt 即可运行此脚本

    • cd ~/Desktop
    • sh ~/local/demo.txt
    • 你会看到当前目录里多出一个 demo 目录,demo 目录里面还有一些文件
      好了,这个 demo.txt 就是你写出的第一个 Bash 脚本了。
  5. 将 ~/local 添加到 PATH 里

    • cd ~/local; pwd 得到 local 的绝对路径
    • 创建 ~/.bashrc:touch ~/.bashrc
    • 编辑 ~/.bashrc:start ~/.bashrc
    • 在编辑器里添加一行字: export PATH=“local的绝对路径:$PATH”
    • source ~/.bashrc
    • 之前你要运行 sh ~/local/demo.txt,现在你只需要运行 demo.txt 就行了(想想为什么,道理显而易见)
  6. demo.txt 的后缀 .txt 很无聊,删掉它

    • mv ~/local/demo.txt ~/local/demo
    • 现在你只要运行 demo 就能执行该脚本了

细节

  1. PATH 的作用:你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。
  2. 使用 type demo 可以看到寻找过程
  3. 使用 which demo 可以看到寻找结果
  4. 文件后缀的作用:毫无作用你以为一个文件以 .exe 结尾就一定可以双击吗?你以为一个文件以 .png 结尾就一定是图片吗?图样图森破!

参数

demo 脚本只能创建名字为 demo 的目录,太无聊了,我们让目录名是可变的

1
2
3
4
5
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit

$1 表示你传的第一个参数。

老师你怎么知道 $1 表示第一个参数?

好问题,答案是我 Google 出来的 http://lmgtfy.com/?q=bash+first+param
用百度也行 http://www.baidu-x.com/?q=bash+第一个+参数

判断目录是否已存在

1
2
3
4
5
6
7
8
9
10
11
if [ -d $1 ]; then
echo 'error: dir exists'
exit
else
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
echo 'success'
exit
fi

老师,你怎么知道 -d $1 可以判断目录是否存在?
我 Google 出来的 http://lmgtfy.com/?q=bash+dir+exists

返回值

  • exit 0 表示没有错误
  • exit 1 表示错误代码为 1

demo && echo ‘结束’

只有在 demo 成功时,才会执行 echo ‘结束’.

总结

  1. 脚本就是给机器一行一行执行的文本
  2. Bash 脚本有Bash脚本的语法,Node.js 脚本有JS语法
  3. 不管是那种脚本,能实现的功能都差不多,只是语法不同
  4. Bash脚本的语法挺奇葩的,比如$1$#等符号5.不同特别去学Bash 脚本的用法,遇到不会的就 Google、
  5. 不同特别去学Node.js 脚本的用法,遇到不会的就 Google
  6. 新人写代码最大的问题就是「抄错了」多写了一个空格,少写了一个空格,单词拼错了,没有加分号,多加了分号

写自己的脚本

把Linux上的配置文件写成脚本上传到GitHub,要执行的时候下载即可(检查执行权限)

1
2
curl -L http://github.com/xx/xx.sh
./xx.sh
不许转载😡!!!

Buy me a cup of coffee ☕.