2017年5月11日 星期四

[Linux] 學會寫簡單的 shell


例子1:印出字串
先建一個 test.sh 檔,然後寫個簡單的 shell
# test.sh
#! /bin/bash
# This is a simple example of linux shell
echo "Hello Linux!!!"
//執行他
$ sh test.sh

執行後你應該會看到 "Hello Linux!!!" 的字串
<註> "#"代表是註解



Shell 變數:
在 Shell 中變數賦值一般採如右形式: 變數名稱=字串
<註> 記得"="號兩邊不要有空白鍵,會出錯




例子2:學會賦值
# test.sh
#! /bin/bash
name=tom
echo $name
echo ${name}test
echo test$name

執行後會有以下結果
你可以自己去體會那些用法是甚麼意義









Shell 萬用字元:
1. * 符號
* 符號用於匹配字串零次或多次出現。例如 l* 可以匹配 like li 等,換句話說就是可以匹配所有以 * 符號前面的字串為首碼的字串。

2. ? 符號
? 符號僅能匹配對應位置的一個字元,例如 fil? 可以匹配到 file filt 等,但是不能匹配 filesystem 等,因為 filesystem 後面跟的是多個字元

3. [ ] 符號
[ ] 符號的作用是匹配該字元組所限定範圍內的任何一個字元。方括號中的字元組可以直接由給出的字元組成,你有可以限定其範圍,但是中間必須加個 - 符號。
例如 f[a-z]le 可以匹配到 file fale ftle等相關字串

4. ! 符號
! 符號通常與 [] 符號配合使用。 ! 的作用是匹配不列在 [] 中的字元,例如 t[!a-z]st 表示他可以匹配到不是從 a-z 的字元像是 t2st t3st




例子3:如何由自己輸入值
# test.sh
#! /bin/bash
echo "input your name and age:"
read name age
echo "name is :"$name
echo " age is :"$age

使用 read 函數來做賦值的動作,執行 shell 後如下











關於 echo 函數:
在 echo 函數中還定義了一組轉義字元,用於輸出控制或列印無法顯示的字元。在你要使用轉義字元時,要記得加入 "-e" 選項
詳細的轉義字元有甚麼可以去看 鳥哥的私房菜




例子4:學會用 Shell 陣列
#!/bin/bash
name=(tom jim jane chris)
echo "name[0] is :"${name[0]}
echo "name[1] is :"${name[1]}
echo "name[2] is :"${name[2]}
echo "name[3] is :"${name[3]}

這個 shell 必須使用 bash 腳本才可以正常運作,所以請用 bash 執行他
//使用 bash 來執行他
$ bash test.sh








也可以一次取出陣列中所有元素
#!/bin/bash
name=(tom jim jane chris)
echo "name set is :"${name[*]}
echo "name set is :"${name[@]}






如上圖,使用 * @ 符號可以取出陣列所有元素




例子5:陣列的修改與刪除
#!/bin/bash
name=(tom jim jane chris)
name[0]=myself
echo ${name[@]}

unset name[0]
echo ${name[@]}

unset name[@]
echo ${name[*]}

name[0]=myself
name[1]=tom
echo ${name[@]}









看到輸出的結果,你大概就可以明白 unset 是用來清除元素的




Shell 環境變數:
用於描述使用者的的操作環境,或者說是通過設置環境變數來配置使用者的操作環境。Linux 中的環境變數包括:使用者所使用的 Shell 類型工作的主目錄登錄方式等。

在 Linux 的環境變數中,有的是系統預設設定的,用戶只有唯讀的許可權;也有一些是應用性的環境變數,具有相應操作許可權的用戶可以修改

Linux 中常用的基本環境變數如下圖















例子6:環境變數的顯示
#!/bin/bash
echo "PWD:"$PWD
echo "path:"$PATH
echo "Logname:"$LOGNAME
echo "Shell:"$SHELL
echo "HOME:"$HOME
執行後可以印出環境變數值












刪除環境變數:
想刪除環境變數值的話可以直接使用 unset
例如: $unset PATH
可以清空 PATH 中所存的值




Shell 的 if 用法
(1)字串測試符號
字串測試符號的作用是用於測試字串的返回值,具體可以看下圖
























字串測試的範例:
#!/bin/bash
echo please input name:
read name
if test -n $name
then
    echo "name is :"$name
else
    echo "name is null"
fi
上述的程式是獲取使用者的輸入,如果字串個數大於0,則輸出你所輸入的字串,否則提示輸入會是空的。執行後如下










(2) 數值測試運算子
類似於前面的字串測試符,主要用於數值運算時的判斷,具體參數如下:





















(3) 邏輯運算子
用於邏輯語句的判斷,也就是經常用到的 "和" 、 "或" 、 "非"
下面列出常用的邏輯運算子


















例子7:case語句的使用
#!/bin/bash
echo please input your name:
read name
case $name in
Tom)
    echo your name is Tom
    ;;
Jim)
    echo your name is Jim
    ;;
*)
echo "sorry we don't know your name"
;;
esac
執行後則如下,輸入 Tom 或 Jim 會給予對應的回應




















例子8:for迴圈的使用
#!/bin/bash
name=(tom jim my chris)
for i in ${name[*]}
do
    echo $i
done
執行後如下,用 for 迴圈列出陣列內容












例子9:while迴圈的使用
#!/bin/bash
type="";
echo input your type:
read type
while [ $type != "quit" ]
do
    echo "your input is :"$type
    echo input your type:
    read type
done
可由使用者自己輸入字串,並 print 出來,只有輸入 quit 時才會跳出迴圈














例子10:until 語句練習
#!/bin/bash
type="";
echo input your type:
read type
until [ $type = "quit" ]
do
    echo "your input is :"$type
        echo input your type:
        read type
done
執行後如下圖,如果你輸入的字串不是 quit 就會一直進入迴圈















例子11:簡單的函數使用
自己寫一個可以 print 出字串的函數,再由自己呼叫試試看
#!/bin/bash
function printName()
{
    echo my name is Chris!!!
}
printName
執行看結果









例子12:直接傳遞變數
#!/bin/bash
name=tom
printName()
{
    echo name is :$name
        name=chris
    echo name is :$name
}
printName
echo name is :$name
執行看結果,如果有學過程式語言,這應該不難理解











例子13:位址參數
#!/bin/bash
printName()
{
    echo $1
    echo $2
}
printName Tom chris
上面程式的 $1 $2 分別代表你傳入的第一和第二個參數








這真的很簡單,但是先學會這些小基礎對以後也是有幫助的,不應該看不起它,而是要接受它,一開始寫簡單的東西為自己建立自信心真的很重要

沒有留言:

張貼留言