當前位置:首頁 » 操作系統 » linux循環數組

linux循環數組

發布時間: 2023-02-10 10:02:29

『壹』 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 awk 命令詳解(二) if 分支 數組

一、awk if分支結構
二、awk數組 for循環

一、awk if分支結構

案例1
awk過濾中的if分支結構
1)單分支
統計/etc/passwd文件中UID小於或等於1000的用戶個數:

統計/etc/passwd文件中UID大於1000的用戶個數:

統計/etc/passwd文件中登錄Shell是「/bin/bash」的用戶個數:

2)雙分支
分別統計/etc/passwd文件中UID小於或等於1000、UID大於1000的用戶個數:

分別統計/etc/passwd文件中登錄Shell是「/bin/bash」、 登錄Shell不是「/bin/bash」的用戶個數:

二、awk數組

注意,awk數組的下標除了可以使用數字,也可以使用字元串,字元串需要使用雙引號:

案例3:awk擴展應用
1)awk統計Web訪問排名
在分析Web日誌文件時,每條訪問記錄的第一列就是客戶機的IP地址,其中會有很多重復的IP地址。因此只用awk提取出這一列是不夠的,還需要統計重復記錄的數量並且進行排序。
通過awk提取信息時,利用IP地址作為數組下標,每遇到一個重復值就將此數組元素遞增1,最終就獲得了這個IP地址出現的次數。
針對文本排序輸出可以採用sort命令,相關的常見選項為-r、-n、-k。其中-n表示按數字順序升序排列,而-r表示反序,-k可以指定按第幾個欄位來排序

實現此案例需要按照如下步驟進行。
步驟一:統計Web訪問量排名
分步測試、驗證效果如下所述。
1)提取IP地址及訪問量

2)對第1)步的結果根據訪問量排名

案例4:編寫監控腳本
本案例要求編寫腳本,實現計算機各個性能數據監控的功能,具體監控項目要求如下:
CPU負載
網卡流量
內存剩餘容量
磁碟剩餘容量
計算機賬戶數量
當前登錄賬戶數量
計算機當前開啟的進程數量
本機已安裝的軟體包數量

步驟
實現此案例需要按照如下步驟進行。
步驟一:准備工作
1)查看性能數據的命令

步驟二:編寫參考腳本
1)腳本內容如下:

『叄』 Linux Shell awk中怎麼調用數組和for循環

echo|awk'
{
array[1]=1
array[2]=2
array[3]=3
array[4]=4
array[5]=5

for(i=1;i<=5;++i){
printarray[i]
}
}'

『肆』 LINUX 腳本無法得到正確的結果 已經驗證過文件讀取到數組沒有問題

#問題在於對於數組file_list的引用錯誤,修改如下:
#!/bin/sh
#
listname=$1
pathname=$2
#
k=0
whilereadLINE
do
file_list[$k]=$LINE
k=$k+1
done<$listname

cd$pathname

i=0
j=0
forLINEin"${file_list[@]}"#問題在於這里對數組的引用
do
FILE=`find.-name$LINE-print-quit`
if[-n"$FILE"];
then
a[$i]=$FILE
i=$i+1
else
b[$j]=$LINE
j=$j+1
fi
done
echo"foundfiles:"
foriin"${a[@]}";do
echo$i
done
echo"missingfiles:"
forjin"${b[@]}";do
echo$j
done

另外補充一點:

數組下標:最好不要使用k=$k+1表達,應該使用((k+1))或者k=`expr $k + 1`。因為,如果列表文件太多,會引起數組越界,超過系統允許數組下標的最大長度。

希望能夠幫助到你,你的好評是我前進的動力,謝謝!

『伍』 linux shell中數組循環取值和賦值的問題。

[seesea@UC ~]$ cat a.txt
1
2
3
4
a
b
c
d
[seesea@UC ~]$ ar=( $(cat a.txt) )
[seesea@UC ~]$ for (( i = 0; i < ${#ar[@]}; ++i )); do echo "ar[$i] = ${ar[i]}"; done
ar[0] = 1
ar[1] = 2
ar[2] = 3
ar[3] = 4
ar[4] = a
ar[5] = b
ar[6] = c
ar[7] = d

用數組更方便吧。

『陸』 linux shell 命令定義和使用數組出錯

實際上,bash中可以直接對數組賦值的,不需要使用declare。而且取長度的用法${#var}也只能是在bash中。
這些都不是符合POSIX標準的用法,而是bash所特有的。所以,要簡單點的話,就將聲明改為bash,即 #!/bin/bash。
當然,還有兩處小錯,要仔細點:
var =(1 2 3 3 5); #賦值時等號兩邊不能有空格
echo "${#var}; #引號不成對啊,這里也可以不要引號的
命令後面的分號其實也是多餘的,只要換行了,分號就不需要(當然加了也沒錯)

『柒』 linux腳本,在一個循環中賦值一個數組

1、if
[
-n
"$FILE"
];
then
如果$FILE非空,你賦給a[i]
2、如果$FILE為空,你給了b[i]一個空值,應該賦給$ubootfile吧
3、a[i]和b[i]的i值都沒有遞增,最終只能得到i默認值時的a和b吧

『捌』 for(i=1;i<=31;a=i)//Linux中a=i不放就進入死循環,i值就出錯,a只在這里出現 Fedora 15 gcc編譯

樓上的對
我重寫了代碼,msys64 正確:
#include<stdio.h>
main()
{
enum weekday
{ sun,mon,tue,wed,thu,fri,sat} month[31],j,imasyuu;
int i,n;
imasyuu=sun;//imasyuu顯示輸出時起始位置為sunday
j=sun;//設定本月1號為星期幾
printf("\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","sun","mon","tue","wed","thu","fri","sat");
printf("\t");

n=0;//n,控制換行,n記錄的是i日的星期
for(i=0;i<j;i++,n++)//跳過上月的空餘
{

printf("\t");
}
for(i=1;i<=31;i++,n++)
{
if(n%7==0){printf("\n\t");n=0;}//判斷是否換行。
printf("%d\t",i); //輸出日期
}
printf("\n");
return 0;
}
//////////////////////另一種方法,沒有寫輸出函數
enum weekday { sun,mon,tue,wed,thu,fri,sat} ;
int i,j,month[32] ; // i [1,31],month[i] 是i 天星期幾
month[1]=mon;
j=month;
for(i=1;i<32;i++)
{
month[i]=j;
j++;
if(j==7)j=imasyuu;
}

『玖』 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 shell腳本中,數組名稱是一個變數,怎麼列印出它裡面的元素

題主你好,

代碼及測試截圖如下:

希望可以幫到題主, 歡迎追問.

熱點內容
小君直播密碼是多少 發布:2025-09-16 09:25:46 瀏覽:600
用中文編譯的編程軟體 發布:2025-09-16 09:04:37 瀏覽:143
語音編譯器教程 發布:2025-09-16 08:57:44 瀏覽:448
sql注冊伺服器 發布:2025-09-16 08:53:17 瀏覽:611
嵌入式linuxc編程入門 發布:2025-09-16 08:24:18 瀏覽:383
碼片編程器 發布:2025-09-16 08:24:08 瀏覽:952
原神各畫質要什麼配置 發布:2025-09-16 08:17:32 瀏覽:321
讀取資料庫生成xml 發布:2025-09-16 08:17:19 瀏覽:798
sql2000開發版 發布:2025-09-16 07:56:31 瀏覽:809
linux桌面哪個 發布:2025-09-16 07:55:35 瀏覽:63