前言
其实脚本原本来自戏剧舞台,比如下面这个脚本:
公馆一室内
王妈:(小心翼翼地)小姐,您还是得注意身子,就吃点东西吧。
鸡小姐:(把碗砸在地上)不吃,我就是不吃。
(王妈下)
脚本主要由人物对话和舞台提示组成。演员和道具组只需要按照脚本说的做即可。
编程领域的脚本也是类似的,计算机只要照着脚本上说的做即可,比如下面这个脚本:
cd ~/Desktop
mkdir demo
cd demo
echo "hi" > index.html
cd ~/Desktop
所以说,脚本就是给计算机照着做的。这是我们对「脚本」的一个感性认识。
例子
非windows系统还要加上chmod +x filename 修改权限
几个命令
PATH 的作用
你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。(所有命令都是脚本文件而已!linux里面可执行 文件皆命令,不可执行文件就是配置!)
使用 type demo 可以看到寻找过程
使用 which demo 可以看到寻找结果
文件后缀的作用:毫无作用
你以为一个文件以 .exe 结尾就一定可以双击吗?你以为一个文件以 .png 结尾就一定是图片吗?图样图森破!
创建任意目录的脚本
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
exit
注意MAC 和Linux(以及windows)有不一样的地方,执行文件需要加./
原理讲解
上面的 $1为第一个参数
判断目录是否存在
if [ -d $1 ] ; then
echo "$1 已经存在了 "
exit
else
mkdir $1
cd $1
mkdir css js
touch index.html css/style.css js/main.js
echo 'success'
exit
fi
Node.js写脚本(ctrl +D 退出)
上面我们写的脚本叫做 Bash Script(Bash脚本)。
JS 的全称叫做 JavaScript(Java脚本),虽然 JS 和 Java 没什么关系,但是 JS 依然是一种脚本。
我们在 Bash 命令行里输入 Bash 命令,也可以在 Node.js 命令行里输入 JS 命令(Ctrl + D 退出)
Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh
对应 node demo.js
)
进入js命令行:(ctrl +D 退出)(其语法与bash完全不一样)
js里面的显示当前目录与切换目录
process.cwd()
<------->pwd
(bash里面的)
process.chdir("/Users/frank/Desktop")
js里面的print
console.log(1)<-------->echo 1
js里面的建立目录
bash命令行和Node.js命令行实质上是一样的,只不过语法格式不一样!
Node.js文档见下:
https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode
js里面读写
Node.js脚本
一般默认皆是用bash来执行的,故这里要添加一个node
shebang
我们每次执行 ~/local/jsdemo.js 都要用 node 来执行,能不能做到不加 node 也能执行呢(也就是指定执行环境),可以,在 jsdemo.js 第一行加上这一句即可:
#!/usr/bin/env node
(以下操作在 Windows 上可能失败,失败了就算了)
然后你就可以直接用 ~/local/jsdemo.js zzz 了(省得输入 node 了)。
如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入 jsdemo.js zzz 来执行。
如果你再把 jsdemo.js 的后缀 .js 去掉,就可以直接 jsdemo zzz 了。
注意,你每次执行前最好删掉 zzz 目录,以免发生冲突。
总结
脚本就是给机器一行一行执行的文本
Bash 脚本有 Bash 脚本的语法,Node.js 脚本有 JS 语法
不管是那种脚本,能实现的功能都差不多,只是语法不同
Bash 脚本的语法挺奇葩的,比如 # 等符号
不用特别去学 Bash 脚本的用法,遇到不会的就 Google
不用特别去学 Node.js 脚本的用法,遇到不会的就 Google
新人写代码最大的问题就是「抄错了」
多写了一个空格
少写了一个空格
单词拼错了
没有加分号
多加了分号
作业题(重点有上传github模板)
事先把demo.sh这个脚本写好,而后copy进homework这个目录下面;
echo "# homework" >> README.md
git init
git add README.md
git commit -m "first homework"
git remote add origin git@github.com:richard1230/homework.git
git push -u origin master
git add demo.sh
git commit -m "commit homework"
git push -u origin master