shell腳本總結

shell腳本總結

數組

索引數組的幾個常見用法

array[0] array數組的第一個值
array[*] array數組的所有值
#array[*] array數組裏數值的個數
unset array[0] 刪除array數組裏的第一個值
unset array 刪除掉array整個數組

shell腳本總結
shell腳本總結

數組切片:

    ${array[@]:num1:num2}
    num1:要跳過的元素個數
    num2:要取出的元素個數
    取偏移量之後的所有元素
        ${arrray[@]:num1} 

shell腳本總結

數組腳本練習:
1.編寫腳本,定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的文件;統計出其下標爲偶數的文件中的行數之和
#!/bin/bash
array=(/var/log/.log)
echo ${array[]}
sum=0
for i in $(seq 0 $[${#array[
]}-1]);do
if [ $[$i%2] -eq 0 ];then
num=$(cat ${array[$i]}| wc -l )
sum=$[$sum+$num]
fi
done
echo $sum

2.輸入若干個數值存入數組中,採用冒泡法進行升序或降序排序

[root@localhost 0323]# cat MaoPao 
#!/bin/bash
i=0
flag=0
wrong=0
#--------------------------------------------保存數組值---------------------------------------------
while true;do
    read -p "請輸入數字(輸入quit退出):" num
    if [[ "$num" == ^"" ]];then
        echo "請輸入數字 你已經輸錯了$wrong 次"
        let wrong++
    fi
    if [ $wrong -eq 5 ];then
        echo "你居然能輸錯 $wrong 次 我受不了你了"
        break
    elif [[ $num == quit ]];then
                                break
    elif [[ $num =~ ^[-]{0,1}[[:digit:]]{0,}[.]{0,1}[[:digit:]]{0,}[[:digit:]]$ ]];then #篩選出 整數 小數 負數
        echo $num
        array[$i]=$num
        let i++
    else
        echo "請輸入數字 你已經輸錯了$wrong 次"
        let wrong++
    fi
done

#---------------------------------------------比較兩個數大小------------------------------------------
compare () {
    echo $1 > /app/0324/tmp
    echo $2 >> /app/0324/tmp
    max=$(cat /app/0324/tmp|sort -nr|head -1)
    if [[ "$max" == "$1" ]];then
        flag=1
    else
        flag=0
    fi
}

#-------------------------------------------冒泡排序---------------------------------------------------
length=${#array[*]}
for i in $(seq 0 $length);do
    for j in $(seq 0 $[$length-$i]);do
        t=$[$j+1]
        compare ${array[$j]} ${array[$t]}
        if [ $flag -eq 1 ];then
             temp=${array[$j]}
             array[$j]=${array[$t]}
             array[$t]=$temp
        fi
done
done
echo "從小到大排序爲:${array[*]}"

最終結果圖
shell腳本總結
3.實現矩陣轉置

        #!/bin/bash
        #------------------------------------------輸入矩陣---------------------------------------------------
    read -p "請輸入矩陣的行列數" raw
    t=0
    for i in $(seq 0 $[$raw-1]);do
        for j in $(seq 0 $[$raw-1]);do
            read -p "輸入矩陣的值" value
             array[$t]=$value
             let t++
        done
    done

#------------------------------------------計算矩陣的中間位置 -------------------------------------------------------------
    juzhen3 (){
    t=0
    if [ $[$raw%2] -eq 0 ];then
        flag=$[$raw/2]
    else
        flag=$[$[$raw+1]/2]
    fi
#------------------------------------------輸出原矩陣--------------------------------------------------

    for i  in $(seq 0 $[$raw-1]);do
        u=$i
                    for j in $(seq 0 $[$raw-1]);do
                                    echo -e "${array[$t]} \c"
                                    let t++
                    done

#------------------------------------------輸出中間的傳遞符號---------------------------------------
        if [ $[$i+1] -eq $flag ];then
            echo -e "   \c"
            for m in $(seq 1 $raw);do
                echo -e "=\c"
            done
            echo -e ">    \c"
        else
            echo -e "    \c"        
            for m in $(seq 1 $[$raw]);do
                                                    echo -e " \c"
                                    done
            echo -e "    \c"
        fi  
        #------------------------------------------輸出轉置矩陣------------------------------------------------
        for j in $(seq 0 $[$raw-1]);do
                                    echo -e "${array[$u]} \c"
                                    let u=$[$u+$raw]
                    done
                    echo
    done
    unset t i
    }
    juzhen3

最終結果圖:
shell腳本總結

字符串切片

幾個常見用法
shell腳本總結
shell腳本總結

eval命令

eval第一個功能就是可以對命令進行所有的置換,然後再執行該命令。
shell腳本總結
shell腳本總結
第二個功能就是進行標量的多重賦值
shell腳本總結
shell腳本總結

mktemp創建臨時文件(目錄)

mktemp 默認創建在/tmp 下
        -d 在/tmp下創建目錄
        -p dir 在制定路徑下創建臨時文件

shell腳本總結
shell腳本總結

expect 命令

shell腳本總結

注意開頭不是我們常用的 #!/bin/bash
spawn 開啓一個新的進程
expect 捕獲關鍵詞
send 向進程發送字符串
interact 允許交互式
如果最後一行的exoect eof 不加註釋的話就會運行完進程立刻退出

shell腳本總結
使用這個命令可以使我們很方便的將交互式變爲非交互式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章