写脚本Bash脚本、Node.js脚本
node.js中文文档:http://nodejs.cn/api/
写一个脚本
- 找个地方(比如local)新建文件.sh123mkdir ~/localcd ~/localtouch demo.sh
打开并往 demo.sh 里添加以下内容:
12345mkdir democd demomkdir css jstouch index.html css/style.css js/main.jsexit运行脚本
在任意位置执行sh ~/local/demo.sh
即可运行此脚本12cd ~/Desktopsh ~/local/demo.sh
然后你会看到当前目录里多出一个 demo 目录,demo 目录里面还有一些文件
- 依次运行
cd demo
,然后在cmd模式下运行tree /f
好了,这个 demo.sh 就是你写出的第一个 Bash 脚本了。
path
将 ~/local 添加到 PATH 里
cd ~/local; pwd
得到 local 的绝对路径
- 创建 ~/.bashrc:
touch ~/.bashrc
- 编辑 ~/.bashrc:
start ~/.bashrc
,在最后一行添加 export PATH=”local的绝对路径:$PATH” - 执行
source ~/.bashrc
使其生效 - 之前你要运行
sh ~/local/demo.sh
,现在你只需要运行demo.sh
,不需要添加路径了 - demo.txt 的后缀 .txt 很无聊,删掉它
mv ~/local/demo.txt ~/local/demo
现在你只要运行demo
就能执行该脚本了。
细节
- 文件后缀的作用:毫无作用
- PATH 的作用
你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。 - 使用 type demo 可以看到寻找过程
- 使用 which demo 可以看到寻找结果
参数
demo 脚本只能创建名字为 demo 的目录,太无聊了,我们让目录名是可变的吧。$1
是第一个参数、$2
是第二个参数、$3
、$4
……..
此时在相应的文件夹里运行demo 参数
,比如demo hello
就会在这个文件夹内生成一个名为hello的目录,里面有一些文件
完善版
判断是否存在和$1同名的文件夹
打开并编辑demo文件
echo -e "abc\ndef"
输出:12abcdef
-e表示启用解释反斜杠转义
- exit 0 表示没有错误
- exit 1 表示错误代码为 1
- 命令1 && 命令2 :命令1执行成功后才会执行命令2
- 命令1 || 命令2 :命令1执行失败时,执行命令2
- 命令1 ; 命令2 : 命令1执行完后,执行命令2
Node.js 写脚本
我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(Ctrl + D 退出)
Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh
对应 node demo.js
)
Node.js命令
node
进入node模式
切换目录
console.log(process.cwd())
: 显示当前目录路径,等同于bash里的pwd
process.chdir("/Users/frank/Desktop")
进入相应的目录,等同于bash里的cd ~/Desktop
console.log(1)
:等同于bash里的echo 1
- 创建目录12let fs = require("fs")fs.mkdirSync("目录名")
创建文件
|
|
用 JS 脚本来重写 demo.sh
- 在bash模式下,执行
cd ~/local
进入目录 touch jsdemo
: 创建js脚本打开jsdemo文件,编辑它内容如下
123456789101112131415var fs = require('fs')var dirName = process.argv[2] // 你传的参数是从第 2 个开始的process.chdir("/Users/stage/desktop/test") // cd ~/Desktop/tsetfs.mkdirSync("./" + dirName) // mkdir $1process.chdir("./" + dirName) // cd $1fs.mkdirSync('css') // mkdir cssfs.mkdirSync('js') // mkdir jsfs.writeFileSync("index.html", "")fs.writeFileSync("css/style.css", "")fs.writeFileSync("js/main.js", "")process.exit(0)退出node模式
cd ~/Desktop/目录名
进入需要执行node命令的目录node ~/local/jsdemo 参数
:比如node ~/local/jsdemo testFile
shebang的作用
我们每次执行 ~/local/jsdemo 参数
都要在最前面添加 node
来执行,能不能做到不加 node
也能执行呢(也就是指定执行环境),可以,在 jsdemo 里第一行加上这一句即可:#!/usr/bin/env node
:指定这个文件用node模式来执行
|
|
然后你就可以直接用 ~/local/jsdemo.js 参数
了(省得输入 node 了)
如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入 jsdemo 参数
来执行