脚本(学习笔记)

一、编写脚本

  1. 创建一个目录
mkdir ~/local
cd ~/local
touch demo.txt
  1. 编辑demo.txt:
mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit
  1. 在任意位置执行 sh ~/local/demo.txt 即可运行此脚本
cd ~/Desktop
sh ~/local/demo.txt
  1. 将~/local 添加到PATH里
cd ~/local
touch ~/.bashrc
start ~/.bashrc
export PATH="local的绝对路径:$PATH"

source ~/.bashrc
之前要运行 sh ~/local/demo.txt
现在只需运行 demo.txt 就行了

附加知识点

  1. PATH的作用
    每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行
  2. 使用 type demo可以看到寻找过程
  3. 使用 which demo 可以看到寻找结果

参数

demo 脚本只能创建名字为 demo 的目录,为了让目录名是可变的($1表示你传的第一个参数)。

mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit

判断目录是否已存在

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脚本)。

  • 我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(Ctrl + D 退出)。
  • Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh 对应 node demo.js)。

1. 用JS切换目录

console.log(process.cwd()); // 打印当前目录
// process.chdir('~/Desktop'); // 这句话不行的,因为 JS 不认识 ~ 目录
process.chdir("/Users/frank/Desktop");
console.log(process.cwd()); // 打印当前目录

2. 用JS脚本创建目录

Google nodejs create dir

let fs = require("fs");
fs.mkdirSync("demo");

3. 用JS脚本创建文件

Google nodejs create file

let fs = require('fs');
fs.writeFileSync("./index.html", "");

4. 用JS脚本来重写demo.sh

  1. 创建 ~/local/jsdemo.js,内容如下:
2.   var fs = require('fs')
3.  
4.   var dirName = process.argv[2] // 传的参数是从第 2 个开始的
5.  
6.   fs.mkdirSync("./" + dirName) // mkdir $1
7.   process.chdir("./" + dirName) // cd $1
8.   fs.mkdirSync('css') // mkdir css
9.   fs.mkdirSync('js') // mkdir js
10. 
11.  fs.writeFileSync("./index.html", "")
12.  fs.writeFileSync("css/style.css", "")
13.  fs.writeFileSync("./js/main.js", "")
14. 
15.  process.exit(0)
  1. cd ~/Desktop
  2. node ~/local/jsdemo.js zzz,就可以看到 zzz 目录创建成功了。

5. shebang

我们每次执行 ~/local/jsdemo.js 都要用 node 来执行,能不能做到不加 node 也能执行呢(也就是指定执行环境),可以,在 jsdemo.js 第一行加上这一句即可:
#!/usr/bin/env node

你可能感兴趣的:(脚本(学习笔记))