Aşağıdaki betiği deneyin:
#!/usr/bin/env bash
shopt -s nocasematch
for word in $(grep -i "^[^#\S]*Host\(name\)\?" ~/.ssh/config | paste -s -); do
case "$word" in
"Host")
type=host
;;
"Hostname")
type=hostname
;;
*)
case "$type" in
"host")
host=$word
;;
"hostname")
hostname=$word
if [[ "$hostname" == *uberspace.de ]]; then
ssh -v $host "git -C bin pull" # Connecting to $hostname
fi
unset host hostname
;;
esac
esac
done
Öncelikle grepiçinde fordöngü ile tüm satırları yakalamaktır Hostve Hostname. O zaman trhepsini tek bir çizgide birleştiriyor. O zaman her bir kelimeyi ayrıştırma meselesi.
Her bir kelimeyi ayrıştırmak, kelimelere Hostve Hostname(açık olduklarında duyarsız bir şekilde nocasematch), bu anahtar kelimeler bulunduğunda, daha sonra atandıkları hostve hostnamedeğişkenine göre tepki verir . Ana bilgisayar adı değerinin en son olması beklendiğinden, ana bilgisayar adı eşleştikten sonra, komutumuzu orada yerine getiriyoruz uberspace.de. Ana bilgisayar adının ayrıştırılmasını bitirdikten sonra, değerleri ayarlayacağız, böylece yenisini alabilelim.
Senaryoyu hata ayıklamak için, olarak çalıştırın: bash -x ./script.sh.