脚本

作者: lyp82nkl | 来源:发表于2019-06-07 00:32 被阅读0次

    理解脚本

    如果你打开一本 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"
    • 想要知道 local的绝对路径,只需要:
    进入 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
    • 创建 ~/local/jsdemo.js,内容如下
     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);    
               }
    
    • (Windows 用户跳过这一步)给 jsdemo.js 加上执行权限 chmod +x ~/local/jsdemo.js

    • cd ~/Desktop

    • node ~/local/jsdemo.js zzz,就可以看到 zzz 目录创建成功了

    相关文章

      网友评论

          本文标题:脚本

          本文链接:https://www.haomeiwen.com/subject/rpvexctx.html