linuxforin數組
① linux中如何在一個數組中的各個字元串後面統一添加一個字母
shell腳本的一個例子,大概的意思應該不差:
#!/bin/sh
echo /dev/sdb > $$.tmp
echo /dev/sdc >> $$.tmp
aa=`cat $$.tmp`
rm -rf $$.tmp2
for a in $aa
do
b="$a"1
echo $b >> $$.tmp2
done
bb=`cat $$.tmp2`
echo $bb
② Linux Shell 下有3個數組 A(a b c) B(1 2 3) C(x y z) 現在想列印出數組D ("A[]"_"B[]"_"C[]")
很簡單啊……
#!/bin/bash
a=(a b c)
b=(1 2 3)
c=(x y z)
h=0
for ((i=0; i < 3; i++)); do
for ((j=0; j < 3; j++)); do
for ((k=0; k < 3; k++)); do
echo "d[$h] = ${a[$i]}_${b[$j]}_${c[$k]}"
let h++
done
done
done
輸出結果如下:
d[0] = a_1_x
d[1] = a_1_y
d[2] = a_1_z
d[3] = a_2_x
d[4] = a_2_y
d[5] = a_2_z
d[6] = a_3_x
d[7] = a_3_y
d[8] = a_3_z
d[9] = b_1_x
d[10] = b_1_y
d[11] = b_1_z
d[12] = b_2_x
d[13] = b_2_y
d[14] = b_2_z
d[15] = b_3_x
d[16] = b_3_y
d[17] = b_3_z
d[18] = c_1_x
d[19] = c_1_y
d[20] = c_1_z
d[21] = c_2_x
d[22] = c_2_y
d[23] = c_2_z
d[24] = c_3_x
d[25] = c_3_y
d[26] = c_3_z
③ linux腳本,在一個循環中賦值一個數組
數組的賦值操作有問題,改成下面這樣:
for ubootfile in $uboot_list
do
FILE=`find . -name $ubootfile -print -quit`
if [ -n "$FILE" ]; then
a=(${a[@]} $FILE)
else
b=(${b[@]} $FILE)
fi
done
echo "found files:"
echo ${a[@]}
echo "missing files:"
echo ${b[@]}
下面是數組操作的講解,請參考:
數組作為一種特殊的數據結構在任何一種編程語言中都有它的一席之地,當然bashshell也不例外。本文就shell數組來做一個小的總結。
在這里只討論一維數組的情況,關於多維數組(事實上,你得用一維數組的方法來模擬),不涉及。這里包括數組的復制,計算,刪除,替換。
數組的聲明:
1)array[key]=value # array[0]=one,array[1]=two
2)declare -a array # array被當作數組名
3)array=(value1 value2 value3 ... )
4)array=([1]=one [2]=two [3]=three ... )
5)array="one two three" # echo ${array[0|@|*]},把array變數當作數組來處理,但數組元素只有字元串本身
數組的訪問:
1)${array[key]} # ${array[1]}
數組的刪除
1)unsetarray[1] # 刪除數組中第一個元素
2)unset array # 刪除整個數組
計算數組的長度:
1)${#array}
2)${#array[0]}#同上。 ${#array[*]} 、${#array[@]}。注意同#{array:0}的區別
數組的提取
從尾部開始提取:
array=( [0]=one [1]=two [2]=three [3]=four )
${array[@]:1} # two three four,除掉第一個元素後所有元素,那麼${array[@]:0}表示所有元素
${array[@]:0:2} # one two
${array[@]:1:2} # two three
子串刪除
[root@localhostdev]# echo ${array[@]:0}
one two three four
[root@localhostdev]# echo ${array[@]#t*e} # 左邊開始最短的匹配:"t*e",這將匹配到"thre"
one two e four
[root@localhostdev]# echo ${array[@]##t*e} # 左邊開始最長的匹配,這將匹配到"three"
[root@localhostdev]# array=( [0]=one [1]=two [2]=three [3]=four )
[root@localhostdev]# echo ${array[@] %o} # 從字元串的結尾開始最短的匹配
one tw three four
[root@localhostdev]# echo ${array[@] %%o} # 從字元串的結尾開始最長的匹配
one tw three four
子串替換
[root@localhostdev]# array=( [0]=one [1]=two [2]=three [3]=four )
第一個匹配到的,會被刪除
[root@localhostdev]# echo ${array[@] /o/m}
mne twm three fmur
所有匹配到的,都會被刪除
[root@localhostdev]# echo ${array[@] //o/m}
mne twm three fmur
沒有指定替換子串,則刪除匹配到的子符
[root@localhostdev]# echo ${array[@] //o/}
ne tw three fur
替換字元串前端子串
[root@localhostdev]# echo ${array[@] /#o/k}
kne two three four
替換字元串後端子串
[root@localhostdev]# echo ${array[@] /%o/k}
one twk three four
④ linux shell腳本中,數組名稱是一個變數,怎麼列印出它裡面的元素
題主你好,
代碼及測試截圖如下:
希望可以幫到題主, 歡迎追問.
⑤ linux shell 腳本 求任意10個數的最大值。(使用數組)
讀取10個數字存入數組中
然後使用一個變數max將它的初始值設置為數組中第一個元素的值
接著從數組中第二個元素開始遍歷整個數組
如果某個元素的值大於max則將max設置為該值
如此遍歷完整個數組後max中便是整個數組中最大的值
下面是一個簡單的示例代碼
#!/bin/bash
echo-n'輸入10個數:'
read-aa
max=${a[0]};
foriin{1..9}
do
if[${a[$i]}>$max]
then
max=${a[$i]}
fi
done
echo"最大值為:$max"
exit0
⑥ linux shell 怎樣比較兩個數組的內容,並且把不同的部分輸出
unset 不能這么用,需要指定數組索引,也就是數組下標,而不是數組的值,你可以這樣干:
#check if there are any files added
folder_list=(1 2 3 4 5)
file_list=(1 2)
declare -a result_list
t=0
flag=0
echo folder_list=${folder_list[*]}
echo file_list=${file_list[*]}
for m in "${folder_list[@]}"
do
for l in "${file_list[@]}"
do
if [ "$m" == "$l" ]; then
flag=1
break
fi
done
if [ $flag -eq 0 ]; then
result_list[t]=$m
t=$((t+1))
else
flag=0
fi
done
echo result_list=${result_list[*]}
弄個結果數組保存結果,把在file_list里找不到的folder_list值存到結果數組中。