Testdatei in Variable einlesen

D

doncapo

Grünschnabel
Hallo,
ich bin absoluter Newbie und habe die Aufgabe in der Uni bekommen, einen Text zu verschlüsseln.
Zuerst soll ein Shellskript aufgebaut werden, dass die Vorkommen einzelner Buchstaben zählt. Mein Problem ist, das die Datei via Argument bei der Ausführung des Skripts eingelesen werden soll. Also das Argument den Namen beinhalten worüber dann beim Shellskript-Start der Dateiinhalt der Datei, die sich hier hinter verbirgt in ein Variable eingelesen werden soll. Mir ist jedoch leider nicht klar, wie ich das umsetze mit meinem bislang noch dürftigen Kenntnisstand.

Kann mir vielleicht jemand bitte behilflich sein?

Danke im Voraus!
 
Wenn die Datei mit dem ersten Argument übergeben wird dann
Code:
var=$(cat $1)
 
Wenn die Datei mit dem ersten Argument übergeben wird dann
Code:
var=$(cat $1)

Also ich habs nun mit Folgendem testweise versucht, jedoch bekomme ich eine Fehlermeldung.

Code:
set var = $(cat $argv[1])
echo $var

Fehlermeldung: Ungültiger Variablenname
 
Erstmal bitte angeben welche Shell du verwendest.

Dann für den fall der Bash:

Variablenzuweisungen dürfen kein Leerzeichen zwischen dem Gleichheitszeichen und dem Wert enthalten.

Code:
# richtig
VAR=10
#falsch
VAR = 10

Positionsparameter sind in der Bash in den vordefinierten Variablen $1..$N enthalten.
Also das erste Argument in $1 das zweite in $2 usw.
Das laufende Skript in $0 (nur als Zusatzinformation).

Dann solltest du das Quoting nicht vergessen.
Beispiel:
Code:
#!/bin/bash
MY_VAR=$1
echo $MY_VAR
Aufruf
Code:
./myskript "test"

gibt dir test aus

Dann solltest du immer Prüfen, ob es die Datei gibt und sie lesbar ist.

Code:
if ! [ -w "$1" ]; then 
echo " $1 existiert nicht oder ist nicht lesbar" ;
exit;
fi
VAR="$(cat $1)"
...

Gruß Wolfgang
 
Oh sorry, wir sollen generell in der tcsh arbeiten. In den Skripten soll noch folgendes rein:
Code:
#! /bin/csh
 
Dann sollte dir die Manpage deiner Shell schon verraten haben, dass diese Art die Backtics zu sparen $(command ARG) in der CSH nicht gilt.
Also verwende statt dessen Backtics.
 
Gern, nur was ist ein Backtic? Konnte ad hoc bei Google nichts klares finden...?! :hilfe2:
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Ok, habe einen Ansatz: Also es handelt sich um diese "speziellen" Anführungszeichen, wonach deren Inhalt in einer Subshell ausgeführt wird - vermutlich dann also cat xy. Nur wie bekomme ich das in die Variable?
 
Zuletzt bearbeitet:
Mal ehrlich, du willst/sollst das lernen. Hast du dir wirklich mal die Manpage angesehen?
Das solltest du dir in deiner Situation nicht entgehen lassen.

Gerade als Lernender sind solche Bemühungen essentiell.
Schnelle Lösungen kopieren mag dem Zeitgeist entsprechen, sind aber keine Grundlage für das künftige Arbeitsleben.

Gruß Wolfgang
 
Sow, habs nun hinbekommen. Hatte das gestern nicht geschnallt. Mittlerweile isses mir aba klar, sowas habe ich bereits vorher in der Uni behandelt, nur war es entfallen.

Das Ganze schuat nun so aus:

Code:
#! /bin/csh
# Usage: source count $arg1

set var = $argv[1]
set errors = 'Die Datei existiert nicht oder ist leer'
if (`filetest -e $var` || `filetest -z $var`) then
   set file = `cat $var`
   set chars = (a b c)
   foreach i ($chars[*])
      cat $var | wc -c | grep $i # (1
   end
else 
   echo "Fehler: $errors[1]!"
endif

Kann mir jemand verraten wie ich das Abzählen der Buchstaben realisieren kann? Mir will da leider nichts einfallen. Wühle schon die ganze Zeit in meinen Unterlagen - ohne Erfolg.

Danke im Voraus!
 
Zurück
Oben