shell--函式與陣列

míng°發表於2020-11-13

1.函式

1.1函式作用範圍

函式在shell指令碼中僅在當前shll環境中有效,
shell指令碼中變數預設全域性有效
若將變數限定在函式內部使用,在變數前加local命令

1.2定義函式操作

[function] 函式名() {
	命令序列
[return x]
}

function可省略
return x:x為數值,即執行完返回一個值,0或非0值

1.3遞迴函式

呼叫自己本身的函式

#!/bin/bash
# digui
list()
{
for f in `ls $1`
do
        if [ -d "$1/$f" ];
        then echo "$f"
        list "$1/$f" "$2"
        else
        echo "$2$f"
        fi
done
}
list "/var/log" " "

2.陣列

陣列包含的資料型別:
數值型別
字元型別
使用""或’'定義

2.1陣列定義方法

①:陣列名=(value0 value1 value2...)
②:陣列名= [0]=value [1]=value [2]=value
③:列表名="value0 value1 value2"
陣列名=($列表名)
④:陣列名[0]="value"
陣列名[1]="value"
陣列名[2]="value"

2.2獲取陣列長度

echo ${陣列名[*/@]}    ##陣列內容
echo ${#陣列名[*/@]}   ##陣列內容個數
echo ${陣列名[下標]}    ##獲取陣列中某個下標的值。下標:$0.$1.$2

2.3陣列遍歷

for v in ${陣列名[*/@]}   ##v:變數名
do
	echo $v
done

2.4陣列切片

${陣列名[*/@]:起始位置:長度}
例:a=1 2 3 4 5
${a[@]:0:2}    ##表示從$0開始,長度為2,即內容為12

2.5陣列的替換

不替換原先陣列內容,僅在輸出時替換輸出顯示

${陣列名[*/@]/查詢字元/替換字元}

2.6陣列刪除

a=1 2 3 4 5
unset a    ##刪除

2.7氣泡排序

vi num.sh

#!/bin/bash
# 氣泡排序
num=(60 30 50 20 100 70)
for ((i=1;i<${#num[*]};i++))
do
        for ((j=0;j<${#num[*]}-$i;j++))
        do
                if [ ${num[$j]} -gt ${num[(($j+1))]} ]
                then
                temp=${num[$j]}
                num[$j]=${num[(($j+1))]}
                num[(($j+1))]=$temp
                fi
        done
done
echo ${num[*]}

3.shell指令碼除錯

①echo命令
②bash命令

sh [-nvx] 指令碼名

選項:-n:不會執行該指令碼,並檢查語法
-v:執行時,先將內容輸出到螢幕再執行指令碼
-x:將執行內容輸出到螢幕上
③set命令

set -x:開啟調節模式
set +x:關閉調節模式

相關文章