linux shell 學習筆記--變量聲明與賦值,循環


Bash 變量是不分類型的
------------------------
不像其他程序語言一樣,Bash 並不對變量區分"類型".本質上,Bash 變量都是字符串.
但是依賴於上下文,Bash 也允許比較操作和算術操作.決定這些的關鍵因素就是,變量中的值
是否只有數字.
賦值
a=123
a="sdsd"   #注意=左右不要有空格,否則就變成比較字符串操作
引用
$a #借助$符
操作字符串
字符穿連接 
   a="sdfs" 
   b="dsds"
   c=$a$b  
--------------
Bash 支持超多的字符串操作,操作的種類和數量令人驚異.但不幸的是,這些工具缺乏集中性.
一些是參數替換的子集,但是另一些則屬於UNIX 的expr 命令.這就導致了命令語法的不一致和
功能的重疊,當然也會引起混亂.
字符串長度
${#string}
expr length $string
expr "$string" : '.*'
1 stringZ=abcABC123ABCabc
2
3 echo ${#stringZ} # 15
4 echo `expr length $stringZ` # 15
5 echo `expr "$stringZ" : '.*'` # 15
從字符串開始的位置匹配子串的長度
expr match "$string" '$substring'
$substring 是一個正則表達式
expr "$string" : '$substring'
$substring 是一個正則表達式
1 stringZ=abcABC123ABCabc
2 # |------|
3
4 echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
5 echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8
expr index $string $substring
匹配到子串的第一個字符的位置.
1 stringZ=abcABC123ABCabc
2 echo `expr index "$stringZ" C12` # 6
3 # C position.
4
5 echo `expr index "$stringZ" 1c` # 3
6 # 'c' (in #3 position) matches before '1'.
在 C 語言中最近的等價函數為strchr().
提取子串
${string:position}
在 string 中從位置$position 開始提取子串.
如果$string"*""@",那么將提取從位置$position 開始的位置參數,[1]
${string:position:length}
在 string 中從位置$position 開始提取$length 長度的子串.
################################Start
Script#######################################
1 stringZ=abcABC123ABCabc
2 # 0123456789.....
3 # 0-based indexing.
4
5 echo ${stringZ:0} # abcABC123ABCabc
6 echo ${stringZ:1} # bcABC123ABCabc
7 echo ${stringZ:7} # 23ABCabc
8
9 echo ${stringZ:7:3} # 23A
10 # 3 個字符長度的子串.
子串削除
${string#substring}
從$string 的左邊截掉第一個匹配的$substring
${string##substring}
從$string 的左邊截掉最后一個個匹配的$substring
1 stringZ=abcABC123ABCabc
2 # |----|
3 # |----------|
4
5 echo ${stringZ#a*C} # 123ABCabc
6 # 截掉'a''C'之間最近的匹配.
7
8 echo ${stringZ##a*C} # abc
9 # 截掉'a''C'之間最遠的匹配.
${string%substring}
從$string 的右邊截掉第一個匹配的$substring
${string%%substring}
從$string 的右邊截掉最后一個匹配的$substring
1 stringZ=abcABC123ABCabc
2 # ||
3 # |------------|
4
5 echo ${stringZ%b*c} # abcABC123ABCa
6 # 從$stringZ 的后邊開始截掉'b''c'之間的最近的匹配
7
8 echo ${stringZ%%b*c} # a
9 # 從$stringZ 的后邊開始截掉'b''c'之間的最遠的匹配
子串替換
${string/substring/replacement}
使用$replacement 來替換第一個匹配的$substring.
${string//substring/replacement}
使用$replacement 來替換所有匹配的$substring.
1 stringZ=abcABC123ABCabc
2
3 echo ${stringZ/abc/xyz} # xyzABC123ABCabc
4 # 用'xyz'來替換第一個匹配的'abc'.
5
6 echo ${stringZ//abc/xyz} # xyzABC123ABCxyz
7 # 用'xyz'來替換所有匹配的
個人覺得條件判斷框的格式要求很嚴格,'[' 前后都必須有一個空格
if 結構

if [ condition1 ]
then
    if [ condition2 ]
    then
        do-something # 這里只有在condition1 和condition2 都可用的時候才行.
    fi
elif [ condition3 ]
then
    do ...
else
    do ....
fi

case 結構    注意要以 ;;結束
case "$variable" in
abc) echo "\$variable = abc" ;;
xyz) echo "\$variable = xyz" ;;
*) echo "dfsdf" ;;  #*表示default,若上面匹配都不成功則會執行
esac


for 結構 這是一個基本的循環結構.它與C 的相似結構有很大不同.
# 標准語法.
for a in 1 2 3 4 5 6 7 8 9 10
do
    echo -n "$a "
done

LIMIT=10

for ((a=1; a <= LIMIT ; a++)) # Double parentheses, and "LIMIT" with no "$".
for ((a=1; a <= LIMIT ; a++)) # 雙圓括號, 並且"LIMIT"變量前邊沒有 "$".
do
    echo -n "$a "
done

while [condition]
do
    command...
done

和 for 循環一樣,如果想把do 和條件放到同一行上還是需要一個";".
while [condition]; do

C風格語法
while (( a <= LIMIT )) # 雙圓括號, 變量前邊沒有"$".
do
   echo -n "$a "
   ((a += 1)) # let "a+=1"
   # Yes, 看到了吧.
   # 雙圓括號允許像C 風格的語法一樣增加變量的值.
done

until
這個結構在循環的頂部判斷條件,並且如果條件一直為false 那就一直循環下去.(與while
相反)
until [condition-is-true]
do
command...
done
注意: until 循環的判斷在循環的頂部,這與某些編程語言是不同的.
與 for 循環一樣,如果想把do 和條件放在一行里,就使用";".
until [condition-is-true]; do

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM