一般設置 Shell Script 常用在系統管理、自動化操作檔案、簡化指令寫法等,透過程式語言來減少瑣碎且麻煩的工作。改善操作系統的工作效率,絕對是雙手贊成使用!

簡單說好了,Shell Script 就是將 shell(bash)指令給寫進一個 Script(腳本),並搭配判斷、迴圈等使用,就稱之為 文件腳本。

寫成 Shell Script 的優點

  1. 自動化管理的重要依據
  2. 追蹤與管理系統的重要工作
  3. 簡單入侵偵測功能
  4. 連續指令單一化
  5. 簡易的資料處理
  6. 跨平台支援與學習歷程較短

echo

echo 是 bash 的指令,主要用在輸出字串或數值等。

1
[root@localhost ~]# echo [參數] [字串]

輸出一組字串。

1
2
3
4
5
6
7
[root@localhost ~]# echo demo
demo

// 或

[root@localhost ~]# echo 'demo'
demo

參數
-n 不要在最後自動換行
-e 出現特殊字元,特別加以處理。

特殊字元

特殊字元 說明
\a 發出警告聲
\b 刪除前一個字符
\c 最後不加上換行符號
\f 換行但游標停在原來的位置
\n 換行字串,游標停在行首
\r 游標停在行首,不換行
\t 插入tab 水平定位點
\v 插入垂直定位點,與 \f 類似
\ 兩個右斜線,無特殊意義
' 無特殊意義的單引號,轉為普通文字
" 無特殊意義的雙引號,轉為普通文字

字串內有\n 加上-e 做特別處理。

1
2
3
4
5
6
7
[root@localhost ~]# echo "demo1\ndemo2\ndemo3"
demo1\ndemo2\ndemo3

[root@localhost ~]# echo -e "demo1\ndemo2\ndemo3"
demo1
demo2
demo3

變數

變數是用來儲存「值」,像一個抽屜,可以存放各種值。變數分成兩種:

  • 環境變數
  • 自訂變數

「自訂變數」與「環境變數」使用上的最大不同,就是自訂變數有「使用範圍的限制」,環境變數到哪邊都可以使用,也就是全區域都可以使用,也可以說是「全域變數」。

但是在父程序中定義的「自訂變數」,並無法讓子程序使用。但若是在父程序中定義的「環境變數」或是系統中原本就有的環境變數,那此環境變數就可以在子程序中使用。在子程序中定義的變數基本上無法讓父程序使用,就算在子程序中定義環境變數,一樣無法在父程序中使用。

環境變數(全域)

什麼是環境變數?環境變數就是使用者操作環境的設定。

bash 提供了以下幾種變數,他們特點都是以大寫命名。

  • $USER 目前使用者是誰。
  • $HOME 使用者的家目錄。
  • $HISTSIZE 儲存下過的指定清單的檔案位置。
  • $PATH 分號分隔的一連串目錄,執行指令時的搜尋目錄。
  • $SHELL 當前使用的 Shell 名稱。
  • $MAIL 與收發 mail 有關係。
  • $LANG 儲存使用者的語系。
  • $RANDOM 產生亂數(介於0到32767之間)。
  • $IFS 用來分隔欄位的字元清單。
  • $UID 目前使用者 uid。
  • PWD 目前所在目錄。

env 指令,查看所有的環境變數設定。

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# env

XDG_SESSION_ID=1
HOSTNAME=localhost.localdomain
SELINUX_ROLE_REQUESTED=
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000

...省略

set指令,查看所有的「自訂變數」及「環境變數」。

1
[root@localhost ~]# set

暫時修改變數設定,可以使用 export 指令。

將環境變數語言短暫設定成英文。

1
[root@localhost ~]# export LANG=en_US

環境變數語言短暫設定成中文

1
[root@localhost ~]# export LANG=zh_TW.UTF-8

自訂變數(區域)

設定一個變數名稱,以等於符號=指定要的值,可以是字串或數值。

1
變數名稱 = 指定的值

設置名稱為 msg 的變數,變數值為「信件發送成功」。

1
2
3
4
[root@localhost ~]# msg="信件發送成功"
[root@localhost ~]# echo $msg

信件發送成功

read 指令可以讀取變數,會停在指令下,可以自行輸入變數值。

1
2
3
4
5
[root@localhost ~]# read msgerror
信件發送錯誤

[root@localhost ~]# echo $msgerror
信件發送錯誤

比較運算式

bash 提供了一個指令 test 可用來測試多種情況的狀態。

檔案測試

結果

  • 1 等於 false
  • 0 等於 true

測試 edm.php 是否為目錄?

1
2
3
4
5
6
[root@localhost ~]# ls -l edm.php
-rw-r--r--. 1 root root 0 9月 22 21:43 edm.php

[root@localhost ~]# test -d edm.php
[root@localhost ~]# echo $?
1

變數測試

測試變數長度是否大於1。

1
2
3
4
5
[root@localhost ~]# ex="我是Sian"

[root@localhost ~]# test -n ex
[root@localhost ~]# echo $?
0

數字比對

測試變數是否相等。

1
2
3
4
5
6
[root@localhost ~]# y=5
[root@localhost ~]# x=7

[root@localhost ~]# test $y -eq $x
[root@localhost ~]# echo $?
1
標籤: w3HexSchool LINUX