脚本

理解脚本

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

脚本就是给计算机照着做的一行行的文本。
比如下面这就是个脚本:

cd ~/Desktop
mkdir demo
cd demo
echo "hi" > index.html
cd ~/Desktop

写一个Bash脚本

  1. 找个地方新建文件,比如 ~/local 目录下,新建文件的后缀随意, .sh 或者 .txt 之类的都可以:
    i. mkdir ~/local
    ii. cd ~ /local
    iii. touch demo.txt
  2. 编辑 demo.txt ,内容如下:
mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit
  1. 给 demo.txt 添加执行权限chmod +x demo.txt(Windows 不需要)
  2. 在任意位置执行sh ~/local/demo.txt即可运行此脚本:
    i. cd ~/Desktop
    ii. sh ~/local/demo.txt
    iii. 你会看到当前目录里多出一个 demo 目录,demo 目录里面还有一些文件
    这个 demo.txt 就是你写出的第一个Bash 脚本了。
  3. 你觉得每次都要输入这么长一段代码太麻烦了?
    我们可以将 ~/local 添加到 PATH 里,这样以后只要输入 demo.txt 执行就可以了。
    i. cd ~local ; pwd 得到local 的绝对路径
    ii. 临时设置 PATH
    a. 运行 export PATH="local的绝对路径:$PATH",这句话是把 local 目录加到 PATH 里
    b. 这时你只要运行demo.txt就相当于运行sh ~/local/demo.txt
    iii. 永久设置 PATH ,上面的 PATH 在你重启 BASH 后就会失效,如果你希望 PATH 一直生效,看下面
    a. 创建 ~/.bashrc :touch ~/.bashrc
    b. 编辑 ~/.bashrc :start ~/.bashrc
    c. 在编辑器里添加一行字:export PATH="local的绝对路径:$PATH",关闭编辑器
    d. source ~/.bashrc
    e. 现在你只要运行demo.txt就相当于运行sh ~/local/demo.txt了,即使 BASH 重启了也一直有效
  4. 你还可以删掉 demo.txt 的后缀:
    i. mv ~/local/demo.txt ~local/demo
    ii. 现在你只要运行demo就能执行该脚本了。

细节

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

参数

上面的 demo 脚本只能创建名字为 demo 的目录,让我们做些修改,使目录名字是可变的。

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

$1表示你传的第一个参数。怎么知道的?谷歌(百度)啊!

Google http://lmgtfy.com/?q=bash+first+param
百度 http://www.baidu-x.com/?q=bash+%E7%AC%AC%E4%B8%80%E4%B8%AA+%E5%8F%82%E6%95%B0

判断目录是否已存在

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 依然是一种脚本。

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

用 JS 切换目录

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

console.log 就相当于 echo

用 JS 脚本创建目录

Google nodejs create dir
文档:https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode

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

用 JS 脚本创建文件

Google nodejs create file
文档: https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options

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

用 JS 脚本来重写 demo.sh

  1. 创建 ~/local/jsdemo.js,内容如下
var 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", "") // echo "" > index.html
 fs.writeFileSync("css/style.css", "") // echo "" > css/style.css
 fs.writeFileSync("./js/main.js", "") // echo "" > js/main.js

 process.exit(0) // exit 0
  1. (Windows 用户跳过这一步)给 jsdemo.js 加上执行权限chmod +x ~/local/jsdemo.js
  2. cd ~/Desktop
  3. node ~/local/jsdemo.js zzz,就可以看到 zzz 目录创建成功了

判断目录是否已存在

文档:https://nodejs.org/api/fs.html#fs_fs_existssync_path

var fs = require('fs')
fs.existsSync(path)

shebang

蛇棒一般是指Dota中剧毒术士的2技能或者暗影萨满的大招。

shebang是指“#!”,它取自#(SHArp)和!(bang)。它是很多脚本文件中第一行的前两个字符,用来指明执行这个脚本文件的解释程序。
我们每次执行 ~/local/jsdemo.js 都要用 node 来执行,如果想要不加 node 也能执行(也就是指定执行环境),需要在 jsdemo.js 第一行加上这一句:
#!/usr/bin/env node
(以下操作在 Windows 上可能失败,失败了就算了)

  1. 然后你就可以直接用 ~/local/jsdemo.js zzz 了(省得输入 node 了)。
  2. 如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入 jsdemo.js zzz 来执行。
  3. 如果你再把 jsdemo.js 的后缀 .js 去掉,就可以直接 jsdemo zzz 了。
    注意,你每次执行前最好删掉 zzz 目录,以免发生冲突。

总结

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

你可能感兴趣的:(脚本)