Saya mencoba menghapus akun pengguna jaringan lama dari server lab kami (Mac OS X 10.6). Saya menemukan perintah baris perintah sederhana untuk menemukan direktori pengguna yang belum diakses selama lebih dari setahun:
find /Volumes/Server-HD2/NetworkUsers/Students -type d -maxdepth 1 -mindepth 1 -not -name "." -mtime +356
Menjalankan perintah ini berhasil mendaftar semua akun lama. Saya kemudian menemukan apa yang tampak seperti loop sederhana, tetapi tidak berhasil:
#!/bin/bash
keep1="/Volumes/Server-HD2/NetworkUsers/Students/studenttest"
keep2="/Volumes/Server-HD2/NetworkUsers/Students/studenttest2"
USERLIST='find /Volumes/Server-HD2/NetworkUsers/Students -type d -maxdepth 1 -mindepth 1 -not -name "." -mtime +356'
for a in $USERLIST ; do
[[ "$a" == "$keep1" ]] && continue #skip account 1
[[ "$a" == "$keep2" ]] && continue #skip account 2
echo "Deleting account and home directory for" $a
dscl . delete $a #delete the account
rm -r $a #delete the home directory
done
Ketika saya menjalankan perintah ini sebagai file shell yang dapat dieksekusi atau hanya langsung di baris perintah, itu memotong $ a sebagai setiap kata dalam $ USERLIST. Dalam karya lain jika saya hanya melakukan ini:
USERLIST='find /Volumes/Server-HD2/NetworkUsers/Students -type d -maxdepth 1 -mindepth 1 -not -name "." -mtime +356'
for a in $USERLIST ; do
echo $a
done
Itu akan kembali:
find
/Volumes/Server-HD2/NetworkUsers/Students
-type
d
-maxdepth
1
-mindepth
1
...
sedangkan saya mengharapkannya untuk mengembalikan setiap direktori yang memenuhi perintah "find".
Saya perlu mencari cara untuk membuat array hasil dari perintah find untuk mengulang. Saya kira saya tidak mengerti bagaimana array dan string ditangani dalam bash. Adakah pikiran?
sumber
$( )
saja.