做爲一個程序員,什麼是腳本。必需要理解

Javascript  是一門動態類型、面向對象的腳本語言。javascript

對腳本進行一個感性的認識。就是一個跟計算機執行的文本。css

理解腳本

若是你打開一本 JavaScript 教程,那麼極可能在第一章就看到這句話:html

JavaScript 是一門動態類型、面向對象的腳本語言。前端

然而不少前端工做一年都不清楚這個腳本是什麼意思。java

其實腳本本來來自戲劇舞臺,好比下面這個腳本:node

公館一室內
王媽:(當心翼翼地)小姐,您仍是得注意身子,就吃點東西吧。
雞小姐:(把碗砸在地上)不吃,我就是不吃。
(王媽下)編程

腳本主要由人物對話和舞臺提示組成。演員和道具組只須要按照腳本說的作便可。windows

編程領域的腳本也是相似的,計算機只要照着腳本上說的作便可,好比下面這個腳本:api

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

因此說,腳本就是給計算機照着作的。這是咱們對「腳本」的一個感性認識。接下來咱們寫一個腳本。bash

寫一個腳本

  1. 找個地方新建文件,後綴隨意,通常來講腳本的後綴是 .sh。我喜歡把腳本放在 ~/local 目錄裏。(我知道你沒有這個目錄,建立這個目錄不就好了)
    1. mkdir ~/local
    2. cd ~/local
    3. touch demo.txt
  2. 編輯 demo.txt,內容以下:
    mkdir demo
     cd demo
     mkdir css js
     touch index.html css/style.css js/main.js
     exit
  3. (Windows 用戶請跳過這一步)給 demo.sh 添加執行權限 chmod +x demo.txt
  4. 在任意位置執行 sh ~/local/demo.txt 便可運行此腳本
    1. cd ~/Desktop
    2. sh ~/local/demo.txt
    3. 你會看到當前目錄裏多出一個 demo 目錄,demo 目錄裏面還有一些文件
      好了,這個 demo.txt 就是你寫出的第一個 Bash 腳本了。
  5. 將 ~/local 添加到 PATH 裏
    1. cd ~/local; pwd 獲得 local 的絕對路徑
    2. 建立 ~/.bashrc:touch ~/.bashrc
    3. 編輯 ~/.bashrc:start ~/.bashrc,在最後一行添加 export PATH="local的絕對路徑:$PATH"
    4. source ~/.bashrc
    5. 以前你要運行 sh ~/local/demo.txt,如今你只須要運行 demo.txt 就好了(想一想爲何,道理顯而易見)
  6. demo.txt 的後綴 .txt 很無聊,刪掉它
    1. mv ~/local/demo.txt ~/local/demo
    2. 如今你只要運行 demo 就能執行該腳本了。

細節

  liunx系統中。可執行的文件就是腳本。不可執行的文件就是PATH。(配置文件)

  1. PATH 的做用
    你每次在 Bash 裏面輸入一個命令時(好比 ls、cp、demo),Bash 都會去 PATH 列表裏面尋找對應的文件,若是找到了就執行。
  2. 使用 type demo 能夠看到尋找過程
  3. 使用 which demo 能夠看到尋找結果
  4. 文件後綴的做用:毫無做用
    你覺得一個文件以 .exe 結尾就必定能夠雙擊嗎?你覺得一個文件以 .png 結尾就必定是圖片嗎?圖樣圖森破!
  5. windows中文件後綴的名做用是用什麼工具打開它。

參數

demo 腳本只能建立名字爲 demo 的目錄,太無聊了,咱們讓目錄名是可變的吧。

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

$1 表示你傳的第一個參數。

老師你怎麼知道 $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 '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

老師,你怎麼知道 -d $1 能夠判斷目錄是否存在?

我 Google 出來的 http://lmgtfy.com/?q=bash+dir+exists

返回值

  • exit 0 表示沒有錯誤
  • exit 1 表示錯誤代碼爲 1
demo && echo '結束'

只有在 demo 成功時,纔會執行 echo '結束'

思考題

咱們建立的 index.html style.css 和 main.js 都是空文件,如何給他們填充內容呢?

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

用 JS 切換目錄

console.log(process.cwd()) // 打印當前目錄
// process.chdir('~/Desktop'); // 這句話不行的,由於 JS 不認識 ~ 目錄
process.chdir("/Users/frank/Desktop")
console.log(process.cwd()) // 打印當前目錄

console.log 就至關於 echo

用 JS 腳本建立目錄

Google nodejs create dir

文檔:https://nodejs.org/api/fs.html#fs_fs_mkdirsync_path_mode

let fs = require("fs")
fs.mkdirSync("demo")

用 JS 腳本建立文件

Google nodejs create file

文檔: https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options

let fs = require('fs')
fs.writeFileSync("./index.html", "")

用 JS 腳原本重寫 demo.sh

  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)
  2. (Windows 用戶跳過這一步)給 jsdemo.js 加上執行權限 chmod +x ~/local/jsdemo.js
  3. cd ~/Desktop
  4. node ~/local/jsdemo.js zzz,就能夠看到 zzz 目錄建立成功了

shebang

咱們每次執行 ~/local/jsdemo.js 都要用 node 來執行,能不能作到不加 node 也能執行呢(也就是指定執行環境),能夠,在 jsdemo.js 第一行加上這一句便可:

#!/usr/bin/env node

(如下操做在 Windows 上可能失敗,失敗了就算了)

  1. 而後你就能夠直接用 ~/local/jsdemo.js zzz 了(免得輸入 node 了)。
  2. 若是你已經把 ~/local 加入了 PATH,那麼甚至能夠直接輸入 jsdemo.js zzz 來執行。
  3. 若是你再把 jsdemo.js 的後綴 .js 去掉,就能夠直接 jsdemo zzz 了。

注意,你每次執行前最好刪掉 zzz 目錄,以避免發生衝突。

總結

咱們學會了

  1. 腳本就是給機器一行一行執行的文本
  2. Bash 腳本有 Bash 腳本的語法,Node.js 腳本有 JS 語法
  3. 不論是那種腳本,能實現的功能都差很少,只是語法不一樣
  4. Bash 腳本的語法挺奇葩的,好比 $1 $# 等符號
  5. 不用特別去學 Bash 腳本的用法,遇到不會的就 Google
  6. 不用特別去學 Node.js 腳本的用法,遇到不會的就 Google
  7. 新人寫代碼最大的問題就是「抄錯了」
    1. 多寫了一個空格
    2. 少寫了一個空格
    3. 單詞拼錯了
    4. 沒有加分號
    5. 多加了分號
相關文章
相關標籤/搜索