Text an Variable hängen

Bash, Shell, PHP, Python, Perl, CGI
snowball
Posts: 218
Joined: 2004-09-15 10:14

Text an Variable hängen

Post by snowball » 2008-04-03 11:49

Hallo Forum,

ich versuche grade ein kleines Admin Script zu schreiben das mir helfen soll, Netzwerkfreigaben zu machen. Leider komme ich nicht wirklich weiter.
Zur Zeit hänge ich an einer bestimmten Stelle. Ziel ist es ein Script auszuführen, ihm den Domainnamen zu übergeben und das Script legt zwei smb Freigaben an. Einmal die Webdaten und einmal die Logfiles. Leider funktioniert nur der Erste Teil. Wenn ich versuche den Servernamen mit einem "_log" zu erweitern, ist die Variable leer. Wie kann ich Text und Namen verbinden?

Code: Select all

#!/bin/bash
HOSTNAME=`echo $1 | awk -F '.' '{print $1}'`
cat >> /home/testuser/test.txt <<EOF
[$HOSTNAME_log]
EOF

Code: Select all

./test.sh asdf.testdomain.de
sollte in der Datei eine Zeile erzeugen die so aussieht:

Code: Select all

[asdf_log]

es steht aber

Code: Select all

[]
drin.
Auch folgenden Versuche haben nichts gebracht.

Code: Select all

["$HOSTNAME_log"]
[$HOSTNAME_log]
["$HOSTNAME_log"]
[$HOSTNAME_log]
[($HOSTNAME_log)]

Hätte jemand die richtige Lösung für mich? Ich weiß nicht mehr genau, wonach ich noch suchen sollte und auch der Bash Scripting Guide hilft mir da nicht weiter.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11604
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Text an Variable hängen

Post by Joe User » 2008-04-03 13:12

Code: Select all

#!/bin/bash
HOSTNAME=`echo $1 | awk -F '.' '{print $1}'`
cat >> /home/testuser/test.txt <<EOF
[${HOSTNAME}_log]
EOF

Commandlines filtert man übrigens nicht mit awk, daher hier mal ein quick&dirty Rohbau für einfache Scripte:

Code: Select all

#!/bin/bash
TZ=UTC0
LC_ALL=C

show_usage() {
  echo "Usage: $(basename ${0}) [OPTIONS]

OPTIONS:

      --domain=FQDN     FQDN of newly created (virtual) host
                          Defaults to: "localhost"

      --help            display this help and exit
      --version         output version information and exit

Report any bugs to: <bugs@domain.tld>
" >&2 && exit 1
}

show_version() {
  local VERSION="0.0.90"
  echo "$(basename ${0}) ${VERSION}
Copyright (C) 2008 Max Mustermann
This is free software. You may redistribute copies of it under the terms
of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>
There is NO WARRANTY, to the extent permitted by law.

Written by Max Mustermann
" >&2 && exit 1
}

show_errmsg() {
  local ERRMSG="n\033[41m\033[1;33m ERROR: \033[0m\033[1m %s\033[0mn"
  printf "${ERRMSG}" "${1:-$(basename ${0}) aborting...}" >&2 && exit 1
}

if [[ "${EUID}" != "0" ]] || [[ "${UID}" != "0" ]] || [[ "${USER}" != "root" ]]; then
  show_errmsg "You must be root to run this script!"
fi

until [[ -z "${1}" ]]; do
  case ${1} in
    --domain=*) DOMAIN="$(echo ${1##*=} | tr [:upper:] [:lower:])" ;;
    --version) show_version ;;
    --help|*) show_usage ;;
  esac
  shift
done

DOMAIN="${DOMAIN:-localhost}"

# your code here
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

snowball
Posts: 218
Joined: 2004-09-15 10:14

Re: Text an Variable hängen

Post by snowball » 2008-04-04 09:24

Vielen Dank für Deine Hilfe. So funktioniert es wie gewünscht.

Dein Skript werde ich mal in Ruhe zerlegen. Atm verstehe ich nur Bahnhof :oops: