你知道什么是脚本吗?

什么是脚本

你可能见过这样一句话:

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 脚本语法大致知道什么意思即可
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 理解脚本 如果你打开一本 JavaScript 教程,那么很可能在第一章就看到这句话: JavaScript 是一...
    desperadokk阅读 595评论 0 0
  • 理解脚本 打开一本 JavaScript 教程,很可能在第一章就看到这句话: JavaScript 是一门动态类型...
    joker731阅读 479评论 0 1
  • 理解脚本 JavaScript 是一门动态类型、面向对象的脚本语言。 脚本就是给计算机照着做的一行行的文本。比如下...
    封燐阅读 324评论 0 0
  • 脚本就是给机器一行一行执行的文本,一般脚本的后缀是 .sh 创建一个脚本 mkdir ~/local 创建一个目录...
    sxfshdf阅读 906评论 0 51
  • 所以说,脚本就是给计算机照着做的。这是我们对「脚本」的一个感性认识。接下来我们写一个脚本。 写一个脚本 找个地方新...
    slTrust阅读 467评论 0 0