美文网首页我爱编程
bash/node编写简单脚本文件

bash/node编写简单脚本文件

作者: 酷热summer | 来源:发表于2018-03-28 09:20 被阅读1250次

    在计算机领域,脚本是指计算机按照文本内容执行指令。接下来我会分别以bash和node两种环境分别编写脚本完成新建文件夹及文件夹下文件。

    一、基础配置

    在开始编写脚本之前,我们需要完成几个基础配置工作,默认以Mac OS系统为例;

    1、修改环境变量

    1)打开终端,直接输入echo $PATH则会输出当前系统的所有PATH值,如下图所示

    path01.png

    2)继续在终端输入:sudo vi ~/.bash_profile,按回车后输入开机密码,切记一定要使用sudo,否则文件编辑后无法保存,输入完成后会直接打开.bash_profile的编辑页面,并输入"export PATH=$PATH:~/local",如下图所示:

    path02.png

    3)编辑完成后多按加下esc,然后输入光标会自动定位到当前编辑器的最底部一行,输入!wq,保存并退出。在这之前,确保在~/local文件夹存在。
    4)然后关闭终端,再次打开,输入 echo $PATH,如下图所示

    path03.png
    2、打开终端时默认定位到桌面

    在mac系统中是不分硬盘的,一般情况下我们都是直接操作Desktop下的目录,然而默认情况下终端是直接打开的用户目录,即/Users/yanjun目录。为了便于操作,能够在打开终端的时候直接定位到桌面,需要进行以下配置:

    cd ~      //打开终端,进入用户目录
    ls -la    //查看列表中是否有.bashrc文件
    touch .bashrc   //如果无.bashrc,则新建一个
    open .bashrc    //在文本编辑器中打开.bashrc文件进行编辑,并输入cd ~/Desktop保存后退出
                    //关闭终端再次打开,直接进入Desktop目录
    

    在此需要说明一个问题,在做完上述操作后,打开终端并没有直接定位到Desktop目录,经查是因为Mac的终端是打开了一个login shell,也就是意味着这里读取了/.bash_profile,没有读取/.bashrc。要让打开终端时也读取/.bashrc,需要在/.bash_profile当中加入"[[ -s ~/.bashrc ]] && source ~/.bashrc",如下图所示:

    path04.png
    3、配置tree命令

    tree命令是能够在终端树形展示文件夹结构的命令,比较好用但是在Mac中需要配置。
    打开~/.bashrc文件输入alias tree="find . -print | sed -e 's;1*/;|____;g;s;____|; |;g'"即可。保存退出,再次打开终端即可使用tree命令。

    path05.png

    在以上配置都完成后我们可以开始进行脚本的编写啦。

    二、脚本编写

    在基础配置中,我们已经完成了系统路径的增加,路径为/Users/yanjun/local。

    1、bash脚本编写
    cd ~/local       //打开文件夹
    touch demo.txt      //新建bash脚本
    vi demo.txt      //编辑demo.txt,也可以open demo.txt来打开文本编辑器来编辑文件
    

    继续以上操作,打开demo.txt文件后,输入以下代码:


    demo01.png

    保存退出,在终端输入:ls -la查询所有文件的详细信息,如下:


    demo03.jpeg

    可以看到demo.txt最左侧的属性与ls有不同之处,其中r->read,w->write,x->可执行(对应英语应该是execute,有待确认),demo.txt没有x属性,所以bash不能执行此脚本,那么需要我们在命令行中输入

    chmod +x demo.txt
    cd ~/Desktop    //切换到桌面
    demo.txt        //即可在桌面生成demo文件夹及其目录文件
    
    2、bash脚本扩展

    1)上述方法可以完成新建demo目录,但是灵活行较差,我们希望能够自定义文件名称,此时可以将demo.txt修改如下:


    path04.png

    其中$1代表我们在定义函数时的形参,切换到桌面,输入demo xxx,即可在桌面目录生成xxx文件夹及其目录文件。
    2)那么问题又来了,如果桌面已经存在相同名称的文件夹改如何处理?
    我们需要在新建目录之前去判断当前目录是否已经存在,具体语法为:


    demo5.png

    3)如果需要在文件中添加一些内容的话,可以尝试着修改脚本为:

    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 "<!DOCTYPE><title>Hello</title><h1>Hi</h1>" >> index.html
      echo "h1{color:red;}" >> css/style.css
      echo "var string = \"Hello World\" alert(string)" >> js/main.js
      echo "创建成功"
      exit
    fi
    
    3、node脚本编写

    Bash命令行中输入的是bash命令,在nodejs命令行中输入的是js命令(输入ctrl+d退出node命令行);
    1)nodejs命令行语句与bash命令行语句对比,首先需要在终端输入node以进入node命令行

    process.cwd()               //bash命令:pwd
    console.log(process.cwd())  //bash中的echo相当于node中console.log()
    process.chdir("/Users/yanjun/Desktop")  //cd ~/Desktop
    

    2)在~/local目录下创建jsdemo.js文件,内容如下:

     var fs = require('fs')
    
     var dirName = process.argv[2] // 你传的参数是从第 2 个开始的,在执行的时候是使用node ~/local/jsdemo.js xxx,其中xxx为第二个参数
    
     fs.mkdirSync("./" + dirName) // mkdir $1
     process.chdir("./" + dirName) // cd $1
     fs.mkdirSync('css') // mkdir css
     fs.mkdirSync('js') // mkdir js
    
     fs.writeFileSync("./index.html", "<!DOCTYPE><title>Hello</title><h1>Hi</h1>")
     fs.writeFileSync("css/style.css", "h1{color:red;}")
     fs.writeFileSync("./js/main.js", "var string = \"Hello World\" alert(string)")
    
     process.exit(0)
    

    保存退出后,仍旧需要给脚本文件加上可执行属性,即在终端输入chmod +x ~/local/jsdemo.js
    3)优化
    每次执行node脚本都需要先进入node环境,如何简化这一步骤呢,我们可以在jsdemo.js的首行插入:

    #!/usr/bin/evn node         //shebang语句,指定当前脚本执行环境
    ~/local/jsdemo.js xxx       //可以直接运行
    jsdemo.js xxx               //如果local已经加入到环境变量中即可运行
    jsdemo xxx                  //删掉后缀.js仍旧能后运行
    

    ok,这样就大功告成。

    本文将会转载到个人博客知乎中。

    相关文章

      网友评论

        本文标题:bash/node编写简单脚本文件

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