注意 Windows 有个臭毛病
视频里的路径是 /Users/frank/Desktop ,Windows 上这个路径会报错。
你要把这个路径写成 Windows 的专属格式
/c/Users/frank/DesktopC:\\Users\\frank\\DesktopC:\Users\frank\Desktop
具体是哪一个路径各种情况不一样,我就不细讲了,你把三个路径全试一遍,哪个能用用哪个就行了。
脚本
脚本就是给计算机照着做的
写一个Bash脚本
- 找个地方新建文件,后缀随意,一般来说脚本的后缀是.sh,把脚本放在
~/local目录里。(我知道你没有这个目录,创建一下这个目录就行啦)mkdir ~/.localcd ~/local(请注意倒车,此处需要留心)touch demo.txt
- 编辑demo.txt,内容如下:
1 | pwd #确认一下当前路径是不是~/local |
- (Windows 用户请跳过这一步)给 demo.txt 添加执行权限
chmod +x demo.txt - 在任意位置执行
sh ~/local/demo.txt,即可运行此脚本cd ~/Desktopsh ~/local/demo.txt- 当前目录里多出一个demo目录,demo目录里面还有一些文件,这个demo.txt就是你写的第一个Bash脚本
- 将
~/local添加到PATH里cd ~/local; pwd得到local的绝对路径- 临时设置 PATH
- 运行
export PATH="local的绝对路径:$PATH",这句话是把 local 目录加到 PATH 里,注意替换local的绝对路径 - 这时你只要运行
demo.txt就相等于运行sh ~/local/demo.txt了(你可能会看到 File exists 的报错,不用管它)
- 运行
- 永久设置PATH,上面的 PATH 在你重启 Bash 之后就会失效,如果你希望 PATH 一直生效,看下面
- 创建
~/.bashrc:touch ~/.bashrc - 编辑
~/.bashrc:start ~/.bashrc(Windows下使用start,Mac使用open) - 在编辑器里添加一行字:
export PATH="local的绝对路径:$PATH" source ~/.bashrc- 之前你要运行
sh ~/local/demo.txt,现在你只需要运行demo.txt
- 创建
- 如果你觉得 demo.txt 的后缀 .txt 没什么用,可以用下面的命令删掉它
mv ~/local/demo.txt ~/local/demo- 现在你只要运行
demo就能执行该脚本了。
细节
- PATH 的作用
你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。 - 使用 type demo 可以看到寻找过程
- 使用 which demo 可以看到寻找结果
- 文件后缀的作用:毫无作用
参数
我们让目录名是可变的吧。
demo.txt 目录名
1 | mkdir $1 #$1 表示你传的第一个参数 |
判断目录是否已存在
1 | if [ -d $1 ]; then #-d $1 可以判断目录是否存在 |
返回值
exit 0表示没有错误exit 1表示错误代码为 1
小Tips
命令1 && 命令2:命令1执行成功后,就执行命令2命令1 || 命令2:命令1执行失败后,就执行命令2命令1; 命令2:命令1执行完后,就执行命令2
Node.js脚本
- 我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(Ctrl + D 退出)
- Bash 脚本能做的事情,JS 脚本也能做。(
sh demo.sh对应node demo.js)
用JS切换目录
1 | console.log(process.cwd()) //打印当前目录 |
用JS脚本创建目录
Google nodejs create dir
1 | let fs = require('fs'); |
用JS脚本创建文件
Google nodejs create file
1 | let fs = require('fs'); |
用JS脚本重写demo.sh(Bash脚本)
- 创建
~/local/jsdemo.js,内容如下
1 | var fs = require('fs') |
- (Windows 用户跳过这一步)给 jsdemo.js 加上执行权限
chmod +x ~/local/jsdemo.js cd ~/Desktopnode ~/local/jsdemo.js zzz,就可以看到 zzz 目录创建成功了
shebang
不加 node 也能执行呢(也就是指定当前脚本的执行环境),可以,在 jsdemo.js 第一行加上这一句即可:
1 |
- 然后你就可以直接用
~/local/jsdemo.js zzz了(省得输入 node 了)。 - 如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入
jsdemo.js zzz来执行。 - 如果你再把 jsdemo.js 的后缀 .js 去掉,就可以直接
jsdemo zzz了。
总结
- 脚本就是给机器一行一行执行的文本
- Bash脚本有Bash脚本的语法,Node.js脚本有JS语法,实现的功能都差不多
- Bash 脚本的语法挺奇葩的,比如 $1 $# 等符号
- 不用特别去学 Bash 、Node.js脚本的用法,遇到不会的就 Google
- 新人写代码最大的问题就是「抄错了」
练习
自己用Node.js脚本完成课堂中的 demo.js,实现以下功能
demo.js xxx 可在当前目录下生成目录 xxx,demo.js yyy 可生成目录 yyy
如果要生成的目录已经存在,则直接退出
生成的目录结构如下:
1
2
3
4
5├── css
│ └── style.css
├── index.html
└── js
└── main.jsindex.html 的内容为
1
2
3<!DOCTYPE>
<title>Hello</title>
<h1>Hi</h1>css/style.css 的内容为
1
h1{color: red;}
js/main.js 的内容为
1
2var string = "Hello World"
alert(string)
代码
1 |
|