標準串流與引數

Bash 指令稿入門

Alex Scriven

Data Scientist

STDIN-STDOUT-STDERR

在 Bash 指令稿中,程式有三個「串流」:

  • STDIN(標準輸入):流入程式的資料串流
  • STDOUT(標準輸出):從程式輸出出去的資料串流
  • STDERR(標準錯誤):程式中的錯誤輸出

預設情況下,這些串流會從終端機讀入並輸出到終端機。

你也可能在呼叫指令稿時看到 2> /dev/null;將 STDERR 重新導向丟棄。(1> /dev/null 會是 STDOUT)

Bash 指令稿入門

STDIN-STDOUT 圖示

以下用先前建立的管線,圖示化呈現標準串流:

標準串流示意圖

Bash 指令稿入門

STDIN 範例

想像一個含 3 行資料的文字檔(sports.txt)。

football
basketball
swimming

指令 cat sports.txt 1> new_sports.txt 示範了從檔案讀取並將 STDOUT 寫到新檔。試著 cat new_sports.txt 看看結果。

football
basketball
swimming
Bash 指令稿入門

STDIN 與 ARGV

Bash 指令稿的一個關鍵概念是「引數」

Bash 指令稿可以在執行呼叫後加一個空格,接著帶入要在內部使用的引數。

  • ARGV 是提供給程式的所有引數所組成的陣列。
  • 可用 $ 標記取用各引數:第一個是 $1,第二個是 $2,依此類推。
  • $@$* 會給出 ARGV 中的所有引數。
  • $# 會給出引數的數量。
Bash 指令稿入門

ARGV 範例

看一個指令稿範例(args.sh):

#!/usr/bash
echo $1
echo $2
echo $@
echo "There are " $# "arguments"
Bash 指令稿入門

執行 ARGV 範例

現在執行 bash args.sh one two three four five

one
two
one two three four five
There are 5 arguments

 

#!/usr/bash
echo $1
echo $2
echo $@
echo "There are " $# "arguments"
Bash 指令稿入門

一起來練習吧!

Bash 指令稿入門

Preparing Video For Download...