脚本

2019-06-07  本文已影响0人  lyp82nkl

理解脚本

如果你打开一本 JavaScript 教程,那么很可能在第一章就看到这句话:

JavaScript 是一门动态类型、面向对象的脚本语言。

脚本原本来自戏剧舞台,比如下面这个脚本:

公馆一室内王妈:(小心翼翼地)小姐,您还是得注意身子,就吃点东西吧。
鸡小姐:(把碗砸在地上)不吃,我就是不吃。
(王妈下)

脚本主要由人物对话和舞台提示组成。演员和道具组只需要按照脚本说的做即可。

编程领域的脚本也是类似的,计算机只要照着脚本上说的做即可,比如下面这个脚本:

mkdir demo
cd demo
echo "hi" > index.html
cd ~/Desktop

所以说,脚本就是给计算机照着做的。这是我们对「脚本」的一个感性认识。接下来我们写一个脚本。

写一个脚本

  1. 找个地方新建文件,后缀随意,一般来说脚本的后缀是 .sh。我喜欢把脚本放在 ~/local 目录里。(我知道你没有这个目录,创建这个目录不就行了)
    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. (Windows 用户请跳过这一步)给 demo.sh 添加执行权限
    chmod +x demo.txt
  2. 在任意位置执行 sh ~/local/demo.txt即可运行此脚本
    i. cd ~/Desktop
    ii. sh ~/local/demo.txt
    iii. 你会看到当前目录里多出一个 demo 目录,demo 目录里面还有一些文件
    好了,这个 demo.txt 就是你写出的第一个 Bash 脚本了。
  3. 将 ~/local 添加到 PATH 里
    i. cd ~/local; pwd 得到local 的绝对路径
    ii. 临时设置 PATH
    a. 运行export PATH="local的绝对路径:$PATH",这句话是把 local 目录加到 PATH 里,注意替换local的绝对路径
    b. 这时你只要运行demo.txt 就相等于运行 sh ~/local/demo.txt 了(你可能会看到 File exists 的报错,不用管它)
    iii. 永久设置 PATH,上面的 PATH 在你重启 Bash 之后就会失效,如果你希望 PATH 一直生效,看下面
    a 创建 ~/.bashrc:touch ~/.bashrc
    b 编辑 ~/.bashrc:start ~/.bashrc
    c 在编辑器里添加一行字:export PATH="local的绝对路径:$PATH"
进入 git bash
cd ~/local
pwd
打印出来的东西就是 local的绝对路径!
source ~/.bashrc
之前你要运行 sh ~/local/demo.txt,现在你只需要运行 demo.txt(注意不是 demo,是 demo.txt 
  1. 如果你觉得 demo.txt 的后缀 .txt 没什么用,可以用下面的命令删掉它
    mv ~/local/demo.txt ~/local/demo
    现在你只要运行 demo 就能执行该脚本了。
    但是如果你没有运行过 mv ~/local/demo.txt ~/local/demo,就必须用 demo.txt 才能执行 demo.txt
细节

PATH 的作用
1.你每次在 Bash 里面输入一个命令时(比如 ls、cp、demo),Bash 都会去 PATH 列表里面寻找对应的文件,如果找到了就执行。

  1. 使用 type demo 可以看到寻找过程
  2. 使用 which demo 可以看到寻找结果
  3. 文件后缀的作用:毫无作用
    你以为一个文件以 .exe 结尾就一定可以双击吗?你以为一个文件以 .png 结尾就一定是图片吗?图样图森破!
参数

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

返回值

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 命令(<kbd>Ctrl</kbd> + <kbd>D</kbd> 退出)
  2. Bash 脚本能做的事情,JS 脚本也能做。(sh demo.sh 对应 node demo.js)
重写 demo.sh
 var fs =require('fs');  //这个是nodejs操作吧文件必须的一句
    var dirName =process.argv[2];  //传的参数从第二个开始 0:node 1:jsdemo.js 2:zzz
    fs.exists(dirName,function(a){   //判断文件夹是否存在的固定写法
           if(a){                              //如果a(随便是什么参数都行)存在
                  process.exit(0);        //退出
             }else{
                  fs.mkdirSync("./"+ dirName) ;  //创建一个在当前目录下的目录
                  process.chdir("./"+ dirName) ;    //进入这个目录
                  fs.mkdirSync('css');                //创建css目录
                  fs.mkdirSync('js');
                  fs.writeFileSync("./index.html", `<!DOCTYPE>    
                   <title>Hello</title> 
                   <h1>Hi</h1>`
                  );    //在当前目录下创建index.html文件 里面的内容为'<!Docu...'
                  fs.writeFileSync("css/style.css", "h1{color: red;}");//第一个参数是文件名,  第二个是内容
                  fs.writeFileSync("./js/main.js", `var string = "Hello World"    
                   alert(string)`
                  );
                  process.exit(0);    
           }
上一篇 下一篇

猜你喜欢

热点阅读