標籤:shell 學習筆記
#!/bin/bash
# Author:undoner
# Copyright (c) undoner
# Test Code
# -----------------------------------------------------------------
#標準輸入輸出
echo "What is your name?"
read PERSON
echo "Hello,${PERSON}"
printf "%d %s\n" 1 "abc"
# -----------------------------------------------------------------
#聲明變數:readonly(唯讀),unset(刪除)
var="undoner"
echo "${var}" #輸出 undoner
echo ${#var} #統計字元數量,輸出 7
echo ${var:1:4} #字串截取,輸出ndon
echo `expr index "$var" d` #尋找字元,輸出索引 3
# -----------------------------------------------------------------
#聲明函數:
Hello () {
echo "聲明函數"
}
Hello
#輸出:聲明函數
# -----------------------------------------------------------------
#條件控制:
echo ‘if else語句‘
if_a=10
if_b=20
if [ $if_a == $if_b ]
then
echo "if_a is equal to if_b"
else
echo "if_a is not equal to if_b"
fi
# -----------------------------------------------------------------
#迴圈控制:
#break命令允許跳出所有迴圈(終止執行後面的所有迴圈)。
#continue命令與break命令類似,但只跳出當前迴圈。
echo ‘for迴圈‘
for for_str in ‘This is a string‘
do
echo $for_str
done
#輸出:This is a string
for FILE in $HOME/.bash*
do
echo $FILE
done
#輸出:顯示主目錄下以 .bash 開頭的檔案
echo ‘while迴圈‘
while_sum=0
while [ $while_sum -lt 5 ]
do
while_sum=`expr $while_sum+1`
echo $while_sum
done
#實現計數(有換行),0 1 2 3 4 5
echo ‘until迴圈‘
until_sum=0
until [ ! $until_sum -lt 5 ]
do
echo $until_sum
until_sum=`expr $until_sum + 1`
done
#實現計數(有換行),0 1 2 3 4 5
# -----------------------------------------------------------------
echo ‘case esac語句‘
echo ‘Input a number between 1 to 2‘
echo ‘Your number is:\c‘
read aNum
case $aNum in
1) echo ‘You select 1‘
;;
2) echo ‘You select 2‘
;;
*) echo ‘You do not select a number between 1 to 4‘
;;
esac
# -----------------------------------------------------------------
#聲明數組
array_name=(value0 value1 value2 value3)
echo ${array_name[@]} # 取得數組所有的元素
echo ${array_name[*]} # 取得數組所有的元素
echo ${array_name[2]} # 取得數組單個元素
echo ${#array_name[@]} # 取得數組元素的個數
echo ${#array_name[*]} # 取得數組元素的個數
echo ${#array_name[2]} # 取得數組單個元素的長度
# -----------------------------------------------------------------
#變數替換:變數替換可以根據變數的狀態(是否為空白、是否定義等)來改變它的值
# 形式 說明
# ${var} 變數本來的值
# ${var:-word} 如果變數 var 為空白或已被刪除(unset),那麼返回 word,但不改變 var 的值。
# ${var:=word} 如果變數 var 為空白或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。
# ${var:?message} 如果變數 var 為空白或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。若此替換出現在Shell指令碼中,那麼指令碼將停止運行。
# ${var:+word} 如果變數 var 被定義,那麼返回 word,但不改變 var 的值。
# -----------------------------------------------------------------
#算術運算子列表
#運算子說明 舉例
# +加法`expr $a + $b` 結果為 30。
# -減法`expr $a - $b` 結果為 10。
# *乘法`expr $a \* $b` 結果為 200。
# /除法`expr $b / $a` 結果為 2。
# %取餘`expr $b % $a` 結果為 0。
# =賦值a=$b 將把變數 b 的值賦給 a。
# ==相等 用於比較兩個數字,相同則返回 true。[ $a == $b ] 返回 false。
# !=不相等 用於比較兩個數字,不相同則返回 true。[ $a != $b ] 返回 true。
# -----------------------------------------------------------------
#關係運算子列表
# 運算子 說明 舉例
# -eq檢測兩個數是否相等,相等返回 true。[ $a -eq $b ] 返回 true。
# -ne檢測兩個數是否相等,不相等返回 true。[ $a -ne $b ] 返回 true。
# -gt檢測左邊的數是否大於右邊的,如果是,則返回 true。[ $a -gt $b ] 返回 false。
# -lt檢測左邊的數是否小於右邊的,如果是,則返回 true。[ $a -lt $b ] 返回 true。
# -ge檢測左邊的數是否大等於右邊的,如果是,則返回 true。[ $a -ge $b ] 返回 false。
# -le檢測左邊的數是否小於等於右邊的,如果是,則返回 true。[ $a -le $b ] 返回 true。
# -----------------------------------------------------------------
#布林運算子列表
# 運算子 說明 舉例
# !非運算,運算式為 true 則返回 false,否則返回 true。[ ! false ] 返回 true。
# -o或運算,有一個運算式為 true 則返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
# -a與運算,兩個運算式都為 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。
# -----------------------------------------------------------------
#字串運算子列表
# 運算子 說明 舉例
# =檢測兩個字串是否相等,相等返回 true。[ $a = $b ] 返回 false。
# !=檢測兩個字串是否相等,不相等返回 true。[ $a != $b ] 返回 true。
# -z檢測字串長度是否為0,為0返回 true。[ -z $a ] 返回 false。
# -n檢測字串長度是否為0,不為0返回 true。[ -z $a ] 返回 true。
# str檢測字串是否為空白,不為空白返回 true。[ $a ] 返回 true。
# -----------------------------------------------------------------
#檔案測試運算子列表
# 操作符 說明 舉例
# -b file檢測檔案是否是塊裝置檔案,如果是,則返回 true。[ -b $file ] 返回 false。
# -c file檢測檔案是否是字元裝置檔案,如果是,則返回 true。[ -b $file ] 返回 false。
# -d file檢測檔案是否是目錄,如果是,則返回 true。[ -d $file ] 返回 false。
# -f file檢測檔案是否是普通檔案(不是目錄和裝置檔案),如果是,則返回 true。[ -f $file ] 返回 true。
# -g file檢測檔案是否設定了 SGID 位,如果是,則返回 true。[ -g $file ] 返回 false。
# -k file檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。[ -k $file ] 返回 false。
# -p file檢測檔案是否是具名管道,如果是,則返回 true。[ -p $file ] 返回 false。
# -u file檢測檔案是否設定了 SUID 位,如果是,則返回 true。[ -u $file ] 返回 false。
# -r file檢測檔案是否可讀,如果是,則返回 true。[ -r $file ] 返回 true。
# -w file檢測檔案是否可寫,如果是,則返回 true。[ -w $file ] 返回 true。
# -x file檢測檔案是否可執行,如果是,則返回 true。[ -x $file ] 返回 true。
# -s file檢測檔案是否為空白(檔案大小是否大於0),不為空白返回 true。[ -s $file ] 返回 true。
# -e file檢測檔案(包括目錄)是否存在,如果是,則返回 true。[ -e $file ] 返回 true。
# -----------------------------------------------------------------
#輸入輸出重新導向,全部可用的重新導向命令列表
# 命令 說明
# command > file將輸出重新導向到 file。
# command < file將輸入重新導向到 file。
# command >> file將輸出以追加的方式重新導向到 file。
# n > file將檔案描述符為 n 的檔案重新導向到 file。
# n >> file將檔案描述符為 n 的檔案以追加的方式重新導向到 file。
# n >& m將輸出檔案 m 和 n 合并。
# n <& m將輸入檔案 m 和 n 合并。
# << tag將開始標記 tag 和結束標記 tag 之間的內容作為輸入。
# 其他:
# /dev/null不顯示輸出結果
# /dev/null 2>&1屏蔽 stdout 和 stderr的輸出
# -----------------------------------------------------------------
# wc命令
# 命令 說明
# wc -c file 統計位元組數。
# wc -l file 統計行數。
# wc -m file 統計字元數。這個標誌不能與 -c 標誌一起使用。
# wc -w file 統計字數。一個字被定義為由空白、跳格或換行字元分隔的字串。
# wc -L file 列印最長行的長度。
# wc -help file 顯示協助資訊
# wc --version file 顯示版本資訊
# -----------------------------------------------------------------
#特殊變數列表
#變數含義
# $0當前指令碼的檔案名稱
# $n傳遞給指令碼或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
# $#傳遞給指令碼或函數的參數個數。
# $*傳遞給指令碼或函數的所有參數。
# [email protected]傳遞給指令碼或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同,下面將會講到。
# $?上個命令的退出狀態,或函數的傳回值。
# $$當前Shell進程ID。對於 Shell 指令碼,就是這些指令碼所在的進程ID。
#逸出字元 含義
# \\ 反斜線
# \a 警報,響鈴
# \b 退格(刪除鍵)
# \f 換頁(FF),將當前位置移到下頁開頭
# \n 換行
# \r 斷行符號
# \t 水平定位字元(tab鍵)
# \v 垂直定位字元
Shell學習筆記