スクリプト名は InstallmDNS.sh です。
スクリプトの内容は次のとおりです。
#!/bin/bash
sethostname() {
if [ $# -eq 1 ]
then
hostnamectl set-hostname "$1"
sed -i "/127.0.1.1/d" /etc/hosts
sed -i "/127.0.0.1/a\127.0.1.1 $1" /etc/hosts
reboot
else
echo "The exapmle of execute the script: bash InstallmDNS.sh server1"
echo "This script is executed with one parameter."
exit 0
fi
}
dia=`systemctl status avahi-daemon|grep Active`
if [[ "$dia" =~ "running" ]]
then
echo "mDNS is running"
sethostname
else
apt-get install avahi-daemon -y
echo "mDNS installation complete."
sethostname
fi
スクリプトを実行します。
root@linux:/home/ankon# bash InstallmDNS.sh
mDNS is running
The exapmle of execute the script: bash InstallmDNS.sh server1
This script is executed with one parameter.
パラメータを使用してスクリプトを実行します。
root@linux:/home/ankon# bash InstallmDNS.sh server2
mDNS is running
The exapmle of execute the script: bash InstallmDNS.sh server1
This script is executed with one parameter.
パラメータを追加してスクリプトを実行しましたが、パラメータは何もしませんでした。この問題の原因は何ですか?どうすれば解決できますか?
答え1
パラメータをスクリプトに渡すことは、パラメータをスクリプト内の関数に渡すのとは異なります。
スクリプトに提供されたパラメータは関数に「自動的に渡される」ことはありません。
server2
$ 1はスクリプトに渡された値であると予想しましたが、実際には関数を呼び出すときに関数に引数を渡しませんでした。
if [[ "$dia" =~ "running" ]]
then
echo "mDNS is running"
sethostname <---- This line should pass the arguments
else
apt-get install avahi-daemon -y
echo "mDNS installation complete."
sethostname <---- This line should pass the arguments
fi
表示される行は次のように変更する必要があります。
sethostname $1