脚本

作者: squall1744 | 来源:发表于2018-03-11 21:48 被阅读0次

    Bash脚本


    创建一个脚本

    1. 随便找个地方建立个文件, 假设在~/local里吧

      1. mkdir ~/local
      2. cd ~/local
      3. touch demo
    2. 编辑demo

    mkdir test
    cd test
    mkdir css js
    touch index.html css/style.css js/main.js
    exit
    
    1. 给demo添加执行权限chmod +x demo

    2. 任意位置执行sh ~/local/demo即可运行脚本

    3. 在PATH中添加~/local

      1. cd ~/local
      2. pwd得到绝对路径
      3. 创建~/.bashrc文件并且在里面添加一行export PATH="local的绝对路径:$PATH"
      4. source ~/.bashrc 每次设置完了需要source一下才能生效
    4. 这时候直接输入demo就会运行脚本了, 不需要再输入sh ~/local/demo


    PATH作用

    我们echo $PATH一下, 会发现, PATH是保存命令文件的路径

    路径用:隔开

    PATH
    Linux命令是文件

    首先我们要明确一点, 命令实际是一个文件, 当我们运行一个命令时, 比如ls, 系统会一次在这些路径中找是否有ls这个文件, 直到找到为止, 找不到就提示没有这个命令,这里介绍几个跟环境变量相关的命令命令
    echo $PATH查看$PATH路径
    chmod -X 文件名给文件添加X权限
    pwd显示当前路径
    type 命令显示命令路径
    which 命令显示命令的类型
    我们可以用type ls看看我们ls文件在系统的那里存着


    参数

    我们可以给脚本传参, 假设我们创建了一个demo脚本

    mkdir $1
    cd $1
    mkdir css js
    touch index.html css/style.css js/main.js
    exit
    

    $1就表示我们运行脚本时候传进去的第一个参数
    为什么会知道呢
    Google 出来的 http://lmgtfy.com/?q=bash+first+param
    用百度也行 http://www.baidu-x.com/?q=bash+%E7%AC%AC%E4%B8%80%E4%B8%AA+%E5%8F%82%E6%95%B0


    判断目录是否存在

    if [ -d $1 ]; then
      echo '$1 has exist'
      exit
    else
      mkdir $1
      cd $1
      mkdir css js
      touch index.html css/style.css js/main.js
      exit
    fi
    

    这里面比较难理解, 先说一下[-d $1]的意思
    -d $1 表示文件$1

    bash的判断通过下面的语法

    if[]; then
      ...
    else
      ...
    fi
    

    我们怎么会知道-d $1可以判断目录是否存在?
    Google出来的 http://lmgtfy.com/?q=bash+dir+exists


    返回值

    exit 0表示没有错误
    exit 1表示错误代码为 1

    demo && echo '结束'
    

    只有在 demo 成功时,才会执行echo '结束'


    Node.js 写脚本


    1. 创建 ~/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)
    
    1. 给 jsdemo.js 加上执行权限chmod +x ~/local/jsdemo.js

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

    3. shebang
      我们每次执行 ~/local/jsdemo.js 都要用 node 来执行,能不能做到不加 node 也能执行呢(也就是指定执行环境),可以,在 jsdemo.js 第一行加上这一句即可:

      #!/usr/bin/env node
      

      然后你就可以直接用 ~/local/jsdemo.js zzz 了(省得输入 node 了)。
      如果你已经把 ~/local 加入了 PATH,那么甚至可以直接输入 jsdemo.js zzz 来执行。
      如果你再把 jsdemo.js 的后缀 .js 去掉,就可以直接 jsdemo zzz 了。

    相关文章

      网友评论

          本文标题:脚本

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