1. 程式人生 > >作為一個程序員,什麽是腳本。必須要理解

作為一個程序員,什麽是腳本。必須要理解

需要 java windows https port 代碼 每次 block 發生

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

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

理解腳本

如果你打開一本 JavaScript 教程,那麽很可能在第一章就看到這句話:

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

然而很多前端工作一年都不清楚這個腳本是什麽意思。

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

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

腳本主要由人物對話和舞臺提示組成。演員和道具組只需要按照腳本說的做即可。

編程領域的腳本也是類似的,計算機只要照著腳本上說的做即可,比如下面這個腳本:

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

所以說,腳本就是給計算機照著做的。這是我們對「腳本」的一個感性認識。接下來我們寫一個腳本。

寫一個腳本

  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. 多加了分號

作為一個程序員,什麽是腳本。必須要理解