ubuntu 18.04でbashシェルスクリプトを実行すると、位置パラメータが機能しません。この問題を解決するには?

ubuntu 18.04でbashシェルスクリプトを実行すると、位置パラメータが機能しません。この問題を解決するには?

スクリプト名は 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

おすすめ記事