脚本
脚本是什么
1 | 公馆一室内 |
脚本主要由人物对话和舞台提示组成。演员和道具组只需要按照脚本说的做即可。
这里看明白了,也就明白脚本是什么了 :
- 脚本就是运行时按照已经写好,写在里面的内容既定运行 。而这些内容会有一些动作上的指令完成,下面我们来学习一下bash脚本,与node脚本。
bash脚本
普通bash脚本
1 | mkdir ~/local |
编辑demo.sh
内容如下:1
2
3
4
5mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit
运行demo.sh
: 输入sh ~/local/demo.sh
会执行以下操作
- 创建demo目录
- 进入demo目录
- … 依次执行
bash脚本语言
参数
编辑demo.sh
内容如下:1
2
3
4
5mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit
$1 表示你传的第一个参数。
此处不懂可以谷歌或百度 : bash+first+param or bash 第一个参数
运行demo.sh
: 输入sh ~/local/demo.sh xxx
会执行以下操作
- 创建xxx目录
- 进入xxx目录
- … 依次执行
判断
判断目录是否存在:编辑demo.sh
内容如下:1
2
3
4
5
6
7
8
9
10
11if [ -d $1 ]; then
echo 'error: dir exists'
exit 0
else
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
echo 'success'
exit 1
fi
运行demo.sh
: 输入sh ~/local/demo.sh xxx
会执行以下操作
- 判断xxx目录是否存在
- 如果存在就
exit
退出 - 如果不存在创建xxx目录
- 进入xxx目录
- … 依次执行
bash语言语法很奇怪,很严格 -d $1判断目录是否存在,谷歌搜索 ,代码最好复制粘贴 ,否则会容易出现问题
可以有返回值 exit 0
, exit 1
sh ~/local/demo && echo '创建成功'
当返回1时 则打印创建成功
PATH
cd ~/local
;pwd
得到 local 的绝对路径- 创建 ~/.bashrc:
touch ~/.bashrc
- 编辑 ~/.bashrc:
start ~/.bashrc
,在最后一行添加export PATH="local的绝对路径:$PATH"
~/ 计算机不认识, 需要pwd得到的local绝对路径填进去,注意路径符为/
- 文件后缀的作用:毫无作用
你以为一个文件以 .exe 结尾就一定可以双击吗?你以为一个文件以 .png 结尾就一定是图片吗?图样图森破! 文件的后缀只是确定运行平台的 - 所以我们去掉文件后缀
mv ~/local/demo.sh ~/local/demo
- PATH 的作用
你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。所以我们把脚本都放在~/local
目录中,而local绝对路径又放在PATH环境变量中,每次运行demo xxx
就会自动去path中寻找命令 - 使用 type demo 可以看到寻找过程
- 使用 which demo 可以看到寻找结果
最后我们可以直接使用demo xxx
去执行脚本了
Node 脚本
上面我们写的脚本叫做 Bash Script(Bash脚本)。
JS 的全称叫做 JavaScript(Java脚本),虽然 JS 和 Java 没什么关系,但是 JS 依然是一种脚本。
我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(Ctrl + D 退出)
Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh 对应 node demo.js)
用 JS 切换目录
1 | console.log(process.cwd()) // 打印当前目录 |
console.log 就相当于 echo
用 JS 脚本创建目录
Google nodejs create dir
文档:https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode1
2let fs = require("fs")
fs.mkdirSync("demo")
用 JS 脚本创建文件
Google nodejs create file
文档: https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options1
2let fs = require('fs')
fs.writeFileSync("./index.html", "")
用 JS 脚本来重写 demo.sh
创建 ~/local/jsdemo.js,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14var fs = require('fs')
var dirName = process.argv[2] // 你传的参数是从第 2 个开始的
fs.mkdirSync("./" + dirName) // mkdir $1
process.chdir("./" + dirName) // cd $1
fs.mkdirSync('css') // mkdir css
fs.mkdirSync('js') // mkdir js
fs.writeFileSync("./index.html", "")
fs.writeFileSync("css/style.css", "")
fs.writeFileSync("./js/main.js", "")
process.exit(0)cd ~/Desktop
node ~/local/jsdemo.js zzz
,就可以看到 zzz 目录创建成功了
shebang
我们每次执行 ~/local/jsdemo.js 都要用 node 来执行,能不能做到不加 node 也能执行呢(也就是指定执行环境),可以,在 jsdemo.js 第一行加上这一句即可:
1 | #!/usr/bin/env node |
(以下操作在 Windows 上可能失败,失败了就算了)
- 然后你就可以直接用 ~/local/jsdemo.js zzz 了(省得输入 node 了)。
- 如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入 jsdemo.js zzz 来执行。
- 如果你再把 jsdemo.js 的后缀 .js 去掉,就可以直接 jsdemo zzz 了。
注意,你每次执行前最好删掉 zzz 目录,以免发生冲突。
总结
- 脚本就是给机器一行一行执行的文本
- Bash 脚本有 Bash 脚本的语法,Node.js 脚本有 JS 语法
- 不管是那种脚本,能实现的功能都差不多,只是语法不同
- Bash 脚本的语法挺奇葩的,比如 $1 $# 等符号
- 不用特别去学 Bash 脚本的用法,遇到不会的就 Google
- 不用特别去学 Node.js 脚本的用法,遇到不会的就 Google
- 写代码最大的问题就是「抄错了」
- 多写了一个空格
- 少写了一个空格
- 单词拼错了
- 没有加分号
- 多加了分号