Skip to content

shell scripting

Classic Shell Scripting 讀書筆記(二)

  • Ops

排序文本 sort

locale 對排序的影響

重音位置不同的法文單字

查看字元在 ISO 的八進位數值

分別用傳統 ASCII 和 Canadian-French(系統必須先安裝法文)排序,結果不同

注意空白

-k 指定排序字段時

  • 如未以 -t 指定分隔符號,預設以空白分隔並忽略開頭與結尾的空白
  • 如果指定 -t,則開頭與結尾的空白不會被忽略,例如 ” -X- ” 以 -t " " 分隔,會被分成三個字段: 空白, “-X-” 及空白
  • 如果僅指定一個字段編號,意思是「從該字段開始,一直比對到行的結尾」
  • -k{n},{m} 格式代表「從第 n 個字段開始,至第 m 個字段結尾」
  • -k{n.i},{m.j} 格式代表「從第 n 個字段第 i 個字元開始,至第 m 個字段第 j 個字元結尾」

穩定性

紀錄內的排序字段都相同,但輸出與輸出不一致,代表 sort 並不穩定。GNU 實現了 coreutils 套件,可透過 --stable 彌補這個不足

排除重複

使用 -u 排除重複是基於 key 而非整筆紀錄,如果是後者,則可以搭配 uniq 工具使用

Read More »Classic Shell Scripting 讀書筆記(二)

Classic Shell Scripting 讀書筆記(一)

  • Ops

入門

printf

  • 格式聲明 (format specfications) 是一種佔位符號 (placeholder),結構包含 1) 百分比符號 (%) 2) 指示符 (specifier),常用的有字符串 %s 及十進位整數 %d

tr

範例:Translate DOS file to UNIX

  • tr -d: 自 stdin 刪除 source-char-list 的字符
  • \r: ASCII carriage return

/dev/tty

範例:Read password via /dev/tty

  • 當程序打開 /dev/tty 時,UNIX 會將它重定向到一個終端再與程序結合,該終端可以是 1)實體的 console 2) 串行端口 (serial port) 3) 偽終端 (pseudoterminal)
  • stty (set tty) 用來控制終端的設置,echo/-echo 選項用來開關自動打印輸入的功能

i18n and l10n

  • 當 i18n 作為設計軟體的過程時,無須再修改軟體或重新編譯程式代碼,就可以給特定的群體使用
  • 當 l10n 作為設計軟體的過程時,目的是讓特定的使用者可以使用軟體。其中包含翻譯輸出的文字、貨幣、日期、時間、單位等格式
  • 對使用者來說,用來控制讓哪種語言或文化環境生效的功能,叫做 locale
  • 除了 CPOSTFIX 以外,locale 名稱並未標準化
  • BSD 與 Mac OS X 完全不支援 locale
  • locale 的支援仍未成熟:Shell 腳本常受到 locale 影響;在大多數 UNIX 系統下,很難從 locale 文件與工具來判定字元集 (character class)、等價字元集 (equivalence class) 實際上包含了哪些字元,以及有哪些排序符號 (collating symbol) 可用。
  • Shell 腳本開發者應了解 locale 對他們代碼所造成的影響

列出所有 locales

取得特定 locale 的資訊

定義 LC_ALL 來覆寫預設的 locale,可查詢的變量有日期時間格式 LC_TIME、貨幣格式LC_MONETARY

Read More »Classic Shell Scripting 讀書筆記(一)