你知道什么是脚本吗?

2019-06-01  本文已影响0人  x___h

什么是脚本

你可能见过这样一句话:

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

但是你可能学习使用了很久的 JS 还是不知道脚本的意思。脚本源于舞台剧,主要包含了人物对话和舞台提示,演员根据脚本来演出。类似地,编程领域中计算机根据脚本的命令做,比如:

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

所以说,脚本就是给计算机照着做的“本子”。先有一个感性认识,紧接着我们来写一个脚本

写一个脚本

  1. 打开 Git Bash,进入到一个你喜欢的目录,比如 ~/haha(没有那你可以新建一下啊)
mkdir ~/haha
cd ~/haha
touch demo.txt
  1. 事实上,脚本一般都是 .sh 后缀的文件,但是 linux 在你编辑打开 .sh 后缀的文件就会执行,所以我就写成 .txt,编辑完成 mv 成 .sh 执行即可
  2. 编辑 demo.txt:
mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit(写不写都行)
  1. (Windows 用户跳过)给 demo.txt 添加执行权限
chmod +x demo.txt
  1. 在任意目录下执行 sh ~/haha/demo.txt,比如:
cd ~/Desktop
sh ~/haha/demo.txt

你会发现桌面上出现了 demo 目录,其中还有一些文件
好啦,到目前为止,你写出了你的第一个 Bash 脚本 demo.txt


  1. 将 ~/haha 添加到 PATH 里
cd ~/haha 
pwd (得到 /haha 的绝对路径)
start ~/.bashrc (编辑 ~/.bashrc 文件)
在文件中加一行 export PATH="/haha的绝对路径:$PATH"
source ~/.bash_profile (之前运行需要 sh ~/haha/demo.txt,现在只需要 demo.txt)
mv ~/haha/demo.txt ~/haha/demo (干掉无聊的后缀)

最终你只需运行 demo 即可执行该脚本

细节

  1. PATH 的作用:
  • 可以说命令行系统中的命令本质上就是一个个脚本,你每次在 Bash 中输入一个命令(如ls、mkdir、demo),Bash 都会去 PATH 列表中寻找对应的文件,如果找到了就执行。
  • 前面将 /haha 的绝对路径加入到 PATH 中,demo.txt 相当于变成了一个命令(当然它本身就是脚本文件),当你直接执行 demo(干掉了没用的后缀)时,Bash 从 PATH 中找到了就执行咯。
  • type 命令(如 type dmeo)可以看到寻找命令的过程
  • which 命令可以看到寻找命令的结果
  1. 文件的后缀事实上毫无作用,对 linux 来说打开文件可以自己指定,如:open -a 'Google Chrome' main.js(用 Chrome 浏览器打开 main.js)。并且后缀并不能指定文件是什么,比如以 .png 结尾的文件可能是一个空白文件,而不是一张图片。
  2. 打开 PATH 的方法:echo $PATH,运行一个命令,Bash 就会去 PATH 中从头开始找,找到就运行。对 linux 来说,所有的命令都是脚本文件(可执行文件),不可执行文件就是配置。

参数

前面的脚本只能创建名字叫 demo 的目录,那我想创建一个叫 pemo 的目录怎么办呢?太单调了,我们来让目录名可变吧:

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

$1 表示第一个参数,即 demo pemo(创建叫 pemo 的目录)中的 pemo
我咋知道的?
。。
谷歌出来的啊

判断目录是否已存在

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

-d $1 可以表示目录是否存在,也是我谷歌出来的
以上是这些莫名其妙的语法是 Bash 语法,需要时谷歌即可,不必刻意去学

Node.js脚本

上面我们写的脚本叫做 Bash Script (Bash 脚本),当然 JavaScript 不是 Java 脚本,虽然 JS 与 Java 没半毛线关系,但是 JS 依然是一种脚本。

  1. 我们在 Bash 命令行中输入 Bash 命令,同样的,也可以在 Node.js 命令行中输入 JS 命令。(在 Bash 中运行 node 即可进入 Node.js 命令行,退出<Ctrl+D>)
  2. Bash 脚本可以做的事,JS 脚本也可以做。(sh demo.sh VS node demo.js)
  3. 脚本一般分为两种形式:一行一行输入的;写好一个文件一次性执行的

用 JS 切换目录

console.log(process.cwd()) // 打印当前目录
process.chdir("/Users/frank/Desktop") // 切换目录到桌面(Windows 用户前面加 /c)

console.log() 相当于 echo
process.cwd() 相当于 pwd
JS 不认识 ~

用 JS 脚本创建目录

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

用 JS 脚本创建文件

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

用 JS 脚本重写 demo.sh

var fs = require('fs')
var dirName = process.argv[2] // 你传的参数是从第 2 个开始的 即 node jsdemo xxx
process.chdir("/Users/xxx/Desktop") // cd Desktop
fs.mkdirSync("./" + dirName) // mkdir $1
process.chdir("./" + dirName) // cd $1
fs.mkdirSync(‘css’) // mkdir css
fs.mkdirSync('js') // mkdir js
fs.writeFileSync("./index.html", "") // touch index.html
fs.writeFileSync("css/style.css", "") // touch css/style.css
fs.writeFileSync("./js/main.js", "") // touch js/main.js
process.exit(0)
chmod +x ~/haha/jsdemo.js // Windows 用户跳过这一步
cd ~/Desktop
node ~/haha/jsdemo.js aaa

运行完成即可在桌面看到 aaa 目录

shebang

  • 每次必须用 node ~/haha/jsdemo.js来执行,能不能不要每次都加 node(即指定执行环境) ? 只需在脚本文件第一行前加上#!/usr/bin/env node即可。
  • 当然我们已经将 /haha 加入 PATH,然后 mv 掉后缀,最终我们只需运行 jsdemo aaa就可以创建 aaa目录(最好删掉桌面已有的 aaa 目录,不然重复操作有冲突)

总结

  1. 脚本就是给计算机一行一行执行的文本,而 Node.js 本质上就是脚本
  2. Bash 脚本有 Bash 语法,Node.js 脚本有 JS 语法
  3. 不管哪种脚本,能实现的功能都差不多,只是语法不同
  4. 不用刻意去学 Bash 语法,现阶段也不用去学 JS ,上面的 Node.js 脚本语法大致知道什么意思即可
上一篇 下一篇

猜你喜欢

热点阅读