shell腳本總結
數組
索引數組的幾個常見用法
array[0] array數組的第一個值
array[*] array數組的所有值
#array[*] array數組裏數值的個數
unset array[0] 刪除array數組裏的第一個值
unset array 刪除掉array整個數組
數組切片:
${array[@]:num1:num2}
num1:要跳過的元素個數
num2:要取出的元素個數
取偏移量之後的所有元素
${arrray[@]:num1}
數組腳本練習:
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[*]}"
最終結果圖
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
最終結果圖:
字符串切片
幾個常見用法
eval命令
eval第一個功能就是可以對命令進行所有的置換,然後再執行該命令。
第二個功能就是進行標量的多重賦值
mktemp創建臨時文件(目錄)
mktemp 默認創建在/tmp 下
-d 在/tmp下創建目錄
-p dir 在制定路徑下創建臨時文件
expect 命令
注意開頭不是我們常用的 #!/bin/bash
spawn 開啓一個新的進程
expect 捕獲關鍵詞
send 向進程發送字符串
interact 允許交互式
如果最後一行的exoect eof 不加註釋的話就會運行完進程立刻退出
使用這個命令可以使我們很方便的將交互式變爲非交互式