Shell-script segítség

Fórumok

Üdv, shell-ben kéne egy kis segítség a következőhöz:

echo "ibase=$1;obase=$2;$3" | bc

paraméterekből megkapja az inputot, (2,8,10,16) valamint az outputot, a 2 nem egyezhet ezt külön leellenőrzi, márcsak annyi lenne a kérdésem hogy a scripten belül hogy tudom megcsinálni hogy a beidézett parancs lefusson és az eredményt adja végezetül..?
Előre is köszönöm.

Hozzászólások

Ha jól értem, hogy mi a cél, akkor erre van szükséged:


eredmeny=`echo "ibase=$1;obase=$2;$3" | bc`

vagy


eredmeny=$(echo "ibase=$1;obase=$2;$3" | bc)

Üdv

--
RowCol

Szia!

Nem világos, hogy mi a feladat.

Feladatom az volt, hogy készítsek 1 bash programot, amely a különböző számrendszerek között képes átváltani, de csakis köztük, tehát a hibát le kell kezelje. A hibatűrési része remekül megy a programnak, viszont ezen sort nem tudtam, hogyanis kéne beillesztenem hogy jó legyen, ezért csak azon 1 sort írtam ide és köszönöm hogy válaszoltatok.

én sem értem mi a gond, fentebb láttál a _használatára_ példát, de gondolom a logika nem az erősséged a _működését _ illetően:
ha beállítod az ibase-t az obase-t az ibase formában kell megadnod pl ibase=2 -> obase=1010(=tíz), márpedig _gondolom_ nem ezt szeretnéd,
egész egyszerűen előbb add meg az obase-t aztán az ibase-t (obase=$2;ibase=$1;$3), pl obase= 10 (tíz) ibase=2 (kettő)

Nekem az az érzésem a kérdés alapján, hogy CSAK annyi a kérdés, hogy echo-zás helyett a parancs eredményére van szüksége. Hmmm. Nem egyértelmű... :)
Amennyibben "...az eredményt adja végezetül..." magára a script-re értendő, akkor

az előző hozzászólásban szereplők után:


exit $eredmeny

Vagy lehet egyből tárolás nélkül:


exit `ibase=$1;obase=$2;$3" | bc`

--
RowCol


if [ $1 = $2 ]
then
echo "Megegyezik a cel és forras számrendszer, legalább az egyik terjen el!"
else
if [ $1 -ne 2 || $1 -ne 8 || $1 -ne 10 || $1 -ne 16 || $2 -ne 2 || $2 -ne 8 || $2 -ne 10 || $2 -ne 16 ]
then
echo "csak 2/8/10/16os szamrendszerek kozott valaszthatsz."
else
echo $( echo "ibase=$1;obase=$2;$3" | bc )
fi
fi

Jelenleg így néz ki.
Ezt a hibaüzenetet adja, plz vki segítsen könnybelámad már a szemem (takonykór):

ryen@ryen-nb:~$ ./asd.sh 2 10 10
./asd.sh: line 5: [: hiányzó ']'
./asd.sh: line 5: 2: parancs nem található
./asd.sh: line 5: 2: parancs nem található
./asd.sh: line 5: 2: parancs nem található
./asd.sh: line 5: 10: parancs nem található
./asd.sh: line 5: 10: parancs nem található
./asd.sh: line 5: 10: parancs nem található
./asd.sh: line 5: 10: parancs nem található
10

|| helyett -o

A || a shell beépített tokenje amely komplett parancsokat kapcsol össze valamilyen módon, tehát először e mentén robbantja szét a parancssorodat, utána azokat (első: "[ $1 -ne 2", második: "$1 -ne 8", ..., sokadik: "$2 -ne 16 ]" próbálja külön-külön parancsként lefuttatni.

Vagy [[ ]], lásd: http://pastebin.com/gUMbEHZs

Mondjuk erre is szebben használható a case:

function CheckNum()
{
case $1 in
"2" | "8" | "10" | "16" ) echo "ok" ;;
* ) echo nemok;;
esac
}

if [ $(CheckNum $1) != "ok" ]; then bajvan ; fi
if [ $(CheckNum $2) != "ok" ]; then bajvan ; fi

Épp ma volt erről (is) szó: http://hup.hu/node/96010

Szia én case-al csinálnám, ha ennyi azonos if van, valamint function-al...

#!/bin/bash
obase=$2
ibase=$1
num=$3

if [ $ibase = $obase ]; then
echo "Megegyezik a cel és forras számrendszer, legalább az egyik terjen el!"
exit 1
fi

bc_convert() {
case "$obase" in
2|8|10|16)
echo "obase=$obase;ibase=$ibase;$num" | bc
;;
*)
echo "csak 2/8/10/16os szamrendszerre lehet valtani (megadott: $obase)."
exit 1
;;
esac
}

case "$ibase" in
2|8|10|16)
bc_convert
;;
*)
echo "csak 2/8/10/16os szamrendszerbol lehet valtani masikra (megadott: $ibase)."
exit 1
;;
esac

exit 0

szerk: a program eleje lemaradt, és suliban volt, este publikálom bocsánat utólag is, csak most vettem észre.

program a következő:

do
echo "Ird be az elso szamot:"
read a
if [ `echo "$a" | grep [:alpha:] | wc -l` -ne 0 ]
then
echo "Hiba" Nem szamot adtal meg!"
fi
done
until false
do
until [ "$muv" = "+" -o "$muv" = "-" ] || [ "$muv" = "*" -o "$muv" = "/" ]
do
echo "Valassz muveletet: (+, -, *, /)"
read muv
if [ "$muv" = "q" ]
then exit
fi
if [ "$muv" != "+" -a "$muv" != "-" ] && [ "$muv" = "*" -a "$muv" = "/" ]
then
echo "Hiba! Rossz muveleti jelet adtal meg!"
fi
done
echo "Ird be a masodik szamot:"
read b
echo "$a $muv $b = "`expr $a "$muv" $b`
a=`expr $a "$muv" $b`
muv=""
done

Hibaüzenet:

./calc1: line 15: syntax error near unexpected token `('
./calc1: line 15: ` echo "Valassz muveletet: (+, -, *, /)"'