Shell學習筆記

來源:互聯網
上載者:User

標籤: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學習筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.