簡體   English   中英

在bash shell腳本中檢查數組索引

[英]Checking array indices in bash shell scripting

我是Shell腳本的新手...任何人都可以告訴我如何檢查我是否在第一個'if'語句中位於數組的第一個元素上嗎? 似乎使我變成了整數以外的東西。

#! /bin/bash

namelist=($(lsblk -d -n -o NAME))
sizelist=($(lsblk -d -n -o SIZE))
seriallist=($(lsblk -d -n -o SERIAL))

IFS=$'\n'
modellist=($(lsblk -d -n -o MODEL))

echo "*********** HARD DRIVE DATA SCRIPT ***********"
echo "This script lets you choose the hard drives"
echo " "
echo "********************************************"
echo "* Step one: Choose your hard drive         *"
echo "********************************************"

for i in "${namelist[@]}"
do
    if [ "$i" -eq "0" ]
    then
        echo "First hard drive:"
    else
        echo "Next hard drive:"
    fi
    echo "* Size: ${sizelist[$i]}B"
    echo "* Model: ${modellist[$i]}"
    echo "* Serial number: ${seriallist[$i]}"
    echo "* Linux device name: ${namelist[$i]}"
    echo "* Partition List:"
    echo "Number  Name  Formatted as"
    lsblk -n -o NAME,LABEL,FSTYPE /dev/${namelist[$i]} | tail -n +2
    ((i++))
done
i=0
for item in "${namelist[@]}"
do
    echo $item # so you can see what your assumption actually is
    if [ "$i" -eq "0" ]
    then
        echo "First hard drive:"
    else
        echo "Next hard drive:"
    fi
    echo "* Size: ${sizelist[$i]}B"
    echo "* Model: ${modellist[$i]}"
    echo "* Serial number: ${seriallist[$i]}"
    echo "* Linux device name: ${namelist[$i]}"
    echo "* Partition List:"
    echo "Number  Name  Formatted as"
    lsblk -n -o NAME,LABEL,FSTYPE /dev/${namelist[$i]} | tail -n +2
    ((i++))
done

您正在混淆語法。 項目在這里是指數組的每個元素,而不是計數器。 請注意,除非獲得最終使用的每個設備的序列號,否則它將無法正常工作。 換句話說,您假設生成的每個數組的計數都是相同的,在這里不一定是這種情況。 例如,以root用戶或普通用戶身份獲得的串行系統結果為0。 我知道獲取序列號的唯一方法比這里要復雜得多,因此我不會嘗試對其進行描述,並且它也不會總是為每個設備返回序列號的值。

還要注意,使用這種邏輯,即可能不需要的軟盤驅動器和光盤驅動器,您將獲得fdx和srx的結果。

我也進行了測試,順便說一句,LABEL FSTYPE也一無所獲。 因此,這種方法在Debian類型系統上不起作用,我不能為別人說。

如果要使用:

for i in "${!namelist[@]}"

那么您就不會使用((i ++)),只有在沒有其他改變i的情況下才需要。

使用awk可以更好地工作,awk旨在創建此類報告,但這不在您的問題范圍內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM