Próbuję utworzyć prosty skrypt bashowy, który doda rekord w pliku / etc / hosts mojej maszyny wirtualnej. Udało mi się to zrobić ręcznie, używając:
echo sed -i "2i127.0.0.1 hostname.whatever.com hostname" /etc/hosts
Chciałbym jednak utworzyć skrypt, który prosi o nazwę hosta, a następnie tworzy go dynamicznie, na przykład:
#!/bin/bash
echo "Please enter hostname:"
read hostname
echo sed -i "2i127.0.0.1 $hostname hostname" /etc/hosts
To działa dobrze, ale chciałbym również mócaby ustawić także krótką nazwę „nazwa hosta”. Jak wziąć pierwsze litery zmiennej nazwa_hosta przed .dot, a także powtórzyć to poprawnie w pliku?
Odpowiedzi:
4 dla odpowiedzi № 1Rozszerzenie parametrów:
read -p "Please enter hostname: " hostname
echo "${hostname%%.*}"
Czytaj do tablicy:
IFS=. read -p "Please enter hostname: " -a hostname
echo "${hostname[0]}"
Oba te rozwiązania używają rodzimego basha bez rozwidlenia nowego procesu. Pierwszy z nich jest również zgodny z POSIX, więc będzie działał z / bin / sh.
2 dla odpowiedzi nr 2
Możesz uzyskać nazwę przed kropką za pomocą cut
lubić:
$ hostname=hostname.whatever.com
$ shortname=`cut -d. -f1 <<< $hostname`
$ echo $shortname
hostname