上次你们帮了我大忙之后,我又需要帮助了。
我正在写一个脚本来用smartctl测试我的hdd。所以我当然可以复制每个磁盘的命令,但如果我只设置一次磁盘,然后脚本一个一个地执行这些命令,那就更棒了:
#!/bin/bash
date=`date +%d-%m-%Y-%T`
touch /var/log/disk/Disk-health-check-$date
disks="/dev/sda
/dev/sdb"
for disk in disks
do
wait=$(smartctl -t short $disk | awk '/Please wait/ {print $3}')
echo "waiting..."
sleep $((wait * 60 + 60))
echo "done"
smartctl --log=selftest $disk
smartctl -a $disk
done
exit
但不幸的是,它只使用/dev/sda,而不使用sdb等。
那我怎么才能做到呢?提前谢谢你们!啊!
最佳答案
试试这个:
for disk in disks; do
echo "$disk"
done
你会看到它唯一的回声是
disks
。这是因为你告诉它迭代一个值,这个值是disks
。要做你想做的微妙的事情,你需要:
for disk in $disks; do
echo "$disk"
done
不过,正如我所说,那是马车。假设您的
disks
变量分配有点不同:disks='
/dev/disks/by-label/My Drive
/dev/disks/by-label/Other Drive
/dev/disks/by-label/* TEENAGE DAUGHTER'S DRIVE *
'
这将把
/dev/disks/by-label/My
作为一个条目,Drive
作为下一个条目,*
将扩展到运行脚本时所在目录中的文件名。显然不是你想要的。相反,请使用数组:
disks=(
"/dev/disks/by-label/My Drive"
"/dev/disks/by-label/Other Drive"
"/dev/disks/by-label/* TEENAGE DAUGHTER'S DRIVE *"
)
…并将其迭代为:
for disk in "${disks[@]}"; do
echo "Processing: $disk"
done
关于linux - bash :循环使用变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41942194/