Tag: Shell Script
寫程式很多時要將英文字母大小寫轉換, 例如想將第一個字母轉成大寫; 將 hostname 轉換成全部大寫或小寫等。Shell Script 可以用 tr 指令完成。例如: 上面的 tr 會將 “sam tang” 轉換成 “SAM TANG”, 如果是將大寫轉換成小寫, 將 及 互換即可。 而 tr 另一種寫法可以這樣寫: bash 提供了另一個方法, 使用 “^” 轉換第一個字母成大寫; …
在 Linux 要修改帳號密碼, 可以用 passwd 完成。passwd 需要從 stdin 輸入新密碼, 但很多情況需要用非互動的方式修改, 即一行指令修改密碼。例如用 Shell Script 建立新帳號後, 立即修改新用戶的密碼。 以下會示範不用從 stdin 輸入新密碼的情況下, 用一行指令修改帳號密碼的方法。 版本較新的 Linux 的 passwd 指令, 支援 –stdin 參數, 即不會要求輸入兩次新密碼作為確認, 這樣只要用 …
在 Linux 下要找出個別指令或 process 的執行時間, 可以用 GNU time 實現, 這個工具可以很簡單地測量指令的執行時間。而 “time” 指令已經內建在主要 Linux 發行版。 要測試一個指令的執行時間, 只要在 time 指令後加上要測量的指令, 例如: # time ls 以下是輸出的例子: dir1 dir2 file1 file2 real 0m0.003s …
在 Linux 下執行指令, 很多時會用到 &, &&, | 及 ||, 以下是它們的用法: & 如果在指令後面加上 & 符別, 即表示指令在背景執行, 例如 my-script.sh & && 用 “&&” 分開兩個指令, 即第一道指令執行成功後, 才會執行第二道指令, 例如 make && make install …
在 Shell Script 的第一行稱為 shebang, shebang 由 “#!” 開頭, 並在後面加上解譯器的絕對路徑, 即類似: #!/bin/sh #!/bin/bash #!/usr/bin/perl #!/usr/bin/python 如果 Shell Script 不同的平台執行, 指定的解譯器可能位置有所不同, 如果想增加 Shell Script 在不同 Unix Like 環璄的可流動性, 可以使用 /usr/bin/env …
Shell Script 提供了 $RANDOM 變數,直接用 echo 印出或調用已經可以產生亂數。用 $RANDOM 產生的隨機數會在 0 – 32767 之間,而每次使用 $RANDOM 後,它便會被定義一個新的數值,以下是使用例子: $ echo $RANDOM 這樣便會印出一個隨機數。 以上方法雖然簡單,但最大的問題是不能定義隨機數的長度,因為 $RANDOM 只會產生介乎 0 – 32767 之間的數值。 要定義亂數的長度,可以用 awk 來做,例如: …
Wrapper Script 在 Unix Like 環境十分常見,它不會重新建立一個新的程式,而是會讀取 input 後加入所需的功能,再將 input 直接傳送給現有的指令。以下是 wrapper script 的簡單例子: 以上 Wrapper Script 實際上沒有甚麼用途,它只是將輸入直接傳送給 /root/bin/my-script.sh,所以執行以上 Wrapper 跟執行 /root/bin/my-script.sh 是沒有分別,因為沒有加入任何新功能。如果有用過 QMail 的應該會編輯過 daemontools 的 run script, 這個 …
在 Linux Server 上要用 ftp 傳送檔案,可以用 ftp 指令手動完成,但如果需要經常對特定檔案用 ftp 上傳及下傳,可以用 Shell Script 自動連接到 ftp 伺服器並傳送檔案。 以下是用 Shell Script 登入 ftp 伺服器的例子: 以上 Shell Script 會自動登入 ftp.yourftp.server,並會上傳 filename.txt 到 ftp …
在 Linux 下要產生隨機密碼字串,可以用以下指令: 執行後便會輸出一組 16 個字元的隨機密碼。 要自訂密碼的長度,只需修改上面 head -c 16, 將 16 改成想要的密碼長度,例如要產生 8 個位的密碼,便改成:
rsync 是很常用的檔案傳送工具,以下會介紹用 rsync + SSH 傳送檔案,並以 CentOS 7 作為測試環境。 第一步先在 Server 產生一組 public SSH keys, 該 Client 端可以不用輸入密碼登入 SSH: 現在可以將 public.key 的內容複制起來,可以用 cat 指令: 將以上 public.key 內容複製後,登入到 Client 端,並儲到到 …