我是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
答案 0 :(得分:1)
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
你正在混淆语法。 item在这里指的是数组的每个元素,而不是我的计数器。请注意,除非您获得最终使用的每个设备的连续出版物,否则它将无法工作,您可能不会这样做。换句话说,您假设您生成的每个数组的计数是相同的,这不一定是这里的情况。我在系统中得到0个串行结果,例如,无论是root还是普通用户。我知道获取连续剧的唯一方法远比你在这里复杂,所以我不会尝试描述它,并且它也不会总是为每个设备返回连续剧的值。
另请注意,您将获得fdx和srx的结果,使用此逻辑,即您可能不想要的软盘驱动器和光驱。
顺便说一下,我也测试了,并且没有为LABEL FSTYPE得到任何东西。所以这种方法不适用于Debian类型的系统,我不能为别人说话。
如果您要使用:
for i in "${!namelist[@]}"
然后你不会使用((i ++)),只有在没有其他任何改变时才需要。
使用awk可以更好地工作,awk旨在创建此类报告,但这不在您的问题范围内。