脚本

理解脚本

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

推荐阅读更多精彩内容

  • 理解脚本 打开一本 JavaScript 教程,很可能在第一章就看到这句话: JavaScript 是一门动态类型...
    joker731阅读 466评论 0 1
  • 所以说,脚本就是给计算机照着做的。这是我们对「脚本」的一个感性认识。接下来我们写一个脚本。 写一个脚本 找个地方新...
    slTrust阅读 452评论 0 0
  • 初识脚本 脚本就是给机器一行一行执行的文本。 用bash写一个脚本 找个地方新建文件,后缀随意,一般来说脚本的后缀...
    Chris__Liu阅读 378评论 0 0
  • 剧本主要由人物对话和舞台提示组成,脚本是计算机的剧本 。一般脚本后缀是 .sh,把脚本放在 ~/local 目录里...
    Lichee_3be1阅读 251评论 0 0
  • 最美人间四月天啦!趁着这最美的春天,我又踏上了回家的路。 我有一个习惯,喜欢一个人在回家的动车上,听着音乐,看着远...
    面朝大海_1234阅读 382评论 0 1