脚本就是给机器一行一行执行的文本,一般脚本的后缀是 .sh
创建一个脚本
-
mkdir ~/local
创建一个目录 -
cd ~/local
进入目录 -
touch demo.sh
创建文件 - 编辑 demo.sh 文件内容
mkdir demo
cd demo
mkdir css js
touch index.html css/style.css js/main.js
exit
- 在任意位置执行
sh ~/local/demo.txt
即可运行此脚本,一次运行cd ~/Desktop
sh ~/local/demo.txt
即可在桌面看到 demo 目录包括里面的一些文件。这个demo.sh就是一个脚本。
设置PATH
PATH的作用
- 每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。
- 使用 type demo 可以看到寻找过程
- 使用 which demo 可以看到寻找结果
-
cd ~/local
;pwd
得到 local的绝对路径 - 临时设置 PATH
- 运行
export PATH="local的绝对路径:$PATH"
,这句话是把 local 目录加到 PATH 里,注意替换 local的绝对路径。 - 这时你只要运行
demo.sh
就相等于运行sh ~/local/demo.txt
了。
- 设置永久PATH,上面的 PATH 在你重启 Bash 之后就会失效,如果你希望 PATH 一直生效,看下面
- 创建 ~/.bashrc:
touch ~/.bashrc
- 编辑 ~/.bashrc:
start ~/.bashrc
- 在编辑器里添加一行字:
export PATH="local的绝对路径:$PATH"
- 运行
source ~/.bashrc
- 之前你要运行
sh ~/local/demo.txt
,现在你只需要运行demo.sh
- 可以修改文件后缀,比如
mv ~/local/demo.txt ~/local/demo
,之后只要运行demo就可以运行脚本。
参数(改变目录名)
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit
$1 表示你传的第一个参数,谷歌搜索答案。
判断目录是否存在
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
可以谷歌搜索得到。
Node.js 写脚本
上面我们写的脚本叫做 Bash Script(Bash脚本)。
JS 的全称叫做 JavaScript(Java脚本),虽然 JS 和 Java 没什么关系,但是 JS 依然是一种脚本。
- 我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(<kbd>Ctrl</kbd> + <kbd>D</kbd> 退出)
- Bash 脚本能做的事情,JS 脚本也能做。(
sh demo.sh
对应node demo.js
)
用 JS 切换目录
console.log(process.cwd()) // 打印当前目录
// process.chdir('~/Desktop'); // 这句话不行的,因为 JS 不认识 ~ 目录
process.chdir("/Users/frank/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
- 创建 ~/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", "")
fs.writeFileSync("css/style.css", "")
fs.writeFileSync("./js/main.js", "")
process.exit(0)
- 运行
node ~/local/jsdemo.js 目录名
,就可以看到目录创建成功了。 - shebang ,在 jsdemo.js 第一行加上这一句即可:
#!/usr/bin/env node
,就可以省略 node ,可以直接运行~/local/jsdemo.js 目录名
就可以。 - 也可以设置PATH,方法跟之前相同。
网友评论