理解脚本
如果你打开一本 JavaScript 教程,那么很可能在第一章就看到这句话:
JavaScript 是一门动态类型、面向对象的脚本语言。
脚本原本来自戏剧舞台,比如下面这个脚本:
公馆一室内王妈:(小心翼翼地)小姐,您还是得注意身子,就吃点东西吧。
鸡小姐:(把碗砸在地上)不吃,我就是不吃。
(王妈下)
脚本主要由人物对话和舞台提示组成。演员和道具组只需要按照脚本说的做即可。
编程领域的脚本也是类似的,计算机只要照着脚本上说的做即可,比如下面这个脚本:
mkdir demo
cd demo
echo "hi" > index.html
cd ~/Desktop
所以说,脚本就是给计算机照着做的。这是我们对「脚本」的一个感性认识。接下来我们写一个脚本。
写一个脚本
- 找个地方新建文件,后缀随意,一般来说脚本的后缀是 .sh。我喜欢把脚本放在 ~/local 目录里。(我知道你没有这个目录,创建这个目录不就行了)
i.mkdir ~/local
ii.cd ~/local
请一定要运行这句话!如果不运行,那么下面所有步骤都会出错
iii.touch demo.txt
- 编辑 demo.txt,内容如下:
mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit
- (Windows 用户请跳过这一步)给 demo.sh 添加执行权限
chmod +x demo.txt
- 在任意位置执行
sh ~/local/demo.txt
即可运行此脚本
i.cd ~/Desktop
ii.sh ~/local/demo.txt
iii. 你会看到当前目录里多出一个 demo 目录,demo 目录里面还有一些文件
好了,这个 demo.txt 就是你写出的第一个 Bash 脚本了。 - 将 ~/local 添加到 PATH 里
i.cd ~/local; pwd
得到local 的绝对路径
ii. 临时设置 PATH
a. 运行export PATH="local的绝对路径:$PATH"
,这句话是把 local 目录加到 PATH 里,注意替换local的绝对路径
b. 这时你只要运行demo.txt
就相等于运行sh ~/local/demo.txt 了
(你可能会看到 File exists 的报错,不用管它)
iii. 永久设置 PATH,上面的 PATH 在你重启 Bash 之后就会失效,如果你希望 PATH 一直生效,看下面
a 创建 ~/.bashrc:touch ~/.bashrc
b 编辑 ~/.bashrc:start ~/.bashrc
c 在编辑器里添加一行字:export PATH="local的绝对路径:$PATH"
- 想要知道 local的绝对路径,只需要:
进入 git bash
cd ~/local
pwd
打印出来的东西就是 local的绝对路径!
source ~/.bashrc
之前你要运行 sh ~/local/demo.txt,现在你只需要运行 demo.txt(注意不是 demo,是 demo.txt
- 如果你觉得 demo.txt 的后缀 .txt 没什么用,可以用下面的命令删掉它
mv ~/local/demo.txt ~/local/demo
现在你只要运行 demo 就能执行该脚本了。
但是如果你没有运行过mv ~/local/demo.txt ~/local/demo
,就必须用 demo.txt 才能执行 demo.txt
细节
PATH 的作用
1.你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。
- 使用 type demo 可以看到寻找过程
- 使用 which demo 可以看到寻找结果
- 文件后缀的作用:毫无作用
你以为一个文件以 .exe 结尾就一定可以双击吗?你以为一个文件以 .png 结尾就一定是图片吗?图样图森破!
参数
demo 脚本只能创建名字为 demo 的目录,太无聊了,我们让目录名是可变的吧。
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit
$1 表示你传的第一个参数。
判断目录是否已存在
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
返回值
exit 0 表示没有错误
exit 1 表示错误代码为 1
demo && echo '结束'
只有在 demo 成功时,才会执行 echo '结束'
node.js写脚本
上面我们写的脚本叫做 Bash Script(Bash脚本)。
JS 的全称叫做 JavaScript(Java脚本),虽然 JS 和 Java 没什么关系,但是 JS 依然是一种脚本。
- 我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(<kbd>Ctrl</kbd> + <kbd>D</kbd> 退出)
- Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh 对应 node demo.js)
重写 demo.sh
- 创建 ~/local/jsdemo.js,内容如下
var fs =require('fs'); //这个是nodejs操作吧文件必须的一句
var dirName =process.argv[2]; //传的参数从第二个开始 0:node 1:jsdemo.js 2:zzz
fs.exists(dirName,function(a){ //判断文件夹是否存在的固定写法
if(a){ //如果a(随便是什么参数都行)存在
process.exit(0); //退出
}else{
fs.mkdirSync("./"+ dirName) ; //创建一个在当前目录下的目录
process.chdir("./"+ dirName) ; //进入这个目录
fs.mkdirSync('css'); //创建css目录
fs.mkdirSync('js');
fs.writeFileSync("./index.html", `<!DOCTYPE>
<title>Hello</title>
<h1>Hi</h1>`
); //在当前目录下创建index.html文件 里面的内容为'<!Docu...'
fs.writeFileSync("css/style.css", "h1{color: red;}");//第一个参数是文件名, 第二个是内容
fs.writeFileSync("./js/main.js", `var string = "Hello World"
alert(string)`
);
process.exit(0);
}
-
(Windows 用户跳过这一步)给 jsdemo.js 加上执行权限 chmod +x ~/local/jsdemo.js
-
cd ~/Desktop
-
node ~/local/jsdemo.js zzz,就可以看到 zzz 目录创建成功了
网友评论