Sziasztok!
Segítsetek egy kicsit nekem légyszi.
Hogyan tudom bash-ben egyszerűen eldönteni, hogy az egyik sztring prefix-e egy másiknak vagy sem?
Íme a próbálkozás:
if [[ "$hosszu" =~ "^${prefix}.*" ]];
...
De nem megy, ez mindig hamis. Ha nem változót írok jobb oldalra, hanem fix sztringet akkor jó.
Köszi,
D.
- 3855 megtekintés
Hozzászólások
Na most valami beugrott... biztos a $ nem jó neki, mert regexben
a sztring végére illeszkedik.
- A hozzászóláshoz be kell jelentkezni
hosszu=-r prefix=-r if echo "X$hosszu" | grep -q "^X$prefix" then blabla fi if [[ "X$hosszu" =~ "^X$prefix" ]] ; then echo almafa ;else echo kortefa ;fi
- A hozzászóláshoz be kell jelentkezni
Jó a te szkripted, de ha ! jel van a sztringben, akkor nem megy.
Ezzel mit lehet csinálni?
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
hosszu='toltottkrumpli'
prefix1='tolt'
prefix2='nemtolt'
function is_prefix_of()
{
local pfx=${!2};
test "${!1:0:${#pfx}}" = "$pfx";
}
if is_prefix_of hosszu prefix1;
then
echo "igen";
else
echo "nem";
fi;
(is_prefix_of hosszu prefix2 && echo "igen") || echo "nem";
- A hozzászóláshoz be kell jelentkezni
huh, ez kicsit magas nekem, főleg a föggvény/szubrutin belseje...
__________________________________________________________
Az életben csak egy dolog a szép, de az épp nem jut eszembe.
Slackware Linux 12.0 | 2.6.24.4-janos
- A hozzászóláshoz be kell jelentkezni
Megvan!
Nem a ! jel volt a gáz, mert az event designator script módban ki is van kapcsolva, hanem egy nyitó '['.
Tehát a hasonlítás előtt:
`echo "$hosszu" | sed -e 's/\[/\\\[/g'`
És megy!
Köszi mindenkinek!
- A hozzászóláshoz be kell jelentkezni
del
- A hozzászóláshoz be kell jelentkezni
Hello
Kicsit buta kérdésem:
Milyen paranccsal lehet egy fájlhoz hozzáirni valamit? Mondjuk egy másik fájlt, vagy a standard bemenetről.
Köszi a választ
- A hozzászóláshoz be kell jelentkezni
cat valami >> meglevo_file pl.
- A hozzászóláshoz be kell jelentkezni
cat ezt >> ebbe
erre gondolsz?
- A hozzászóláshoz be kell jelentkezni
pontosan
- A hozzászóláshoz be kell jelentkezni
Ez az, köszi :)
- A hozzászóláshoz be kell jelentkezni
Én így szoktam:
if [ "${hosszu#$rovid}" != "$hosszu" ]; then
echo prefix
else
echo nem prefix
fi
A ${valtozo#sztring} konstrukció a változó értékének elejéről csippenti le a sztringet, ha tudja, és a maradékot adja vissza. Ha nem tudta, visszaadja a változó teljes értékét. A kód hibásan működik, ha a rövid sztring üres, erre külön rá kell még ellenőrizni...
- A hozzászóláshoz be kell jelentkezni
a="almabelmacelma" ;
b="almabe" ;
echo "$a" | awk -v v="$b" '{ if( index($1,v) == 1 ) {printf "PREFIX: "v"\n";}}'
- A hozzászóláshoz be kell jelentkezni
Hali.
Nem tudom, nekem a kovetkezo scriptecske mintha jol mukodne bash-al:
_prefix()
{
echo $hosszu =~ "^$prefix.*"
if [[ "$hosszu" =~ "^${prefix}.*" ]]
then
echo ' :-)'
else
echo ' Uhhh'
fi
}
hosszu="kukac.mano.lo"
pre1="kukac."
pre2="kikic."
prefix=$pre1
_prefix
prefix=$pre2
_prefix
Ami szerintem a regexp-nel problemat okozhat, ha a prefix-ed tartalmaz pontot, plusszt, stb regexp metakaraktert...
Zsiraf
- A hozzászóláshoz be kell jelentkezni
Nem igazán akar a fent vázolt mechanizmussal működni.
fules@chaos:~$ echo "asdf" =~ "^a" asdf =~ ^a fules@chaos:~$ echo $SHELL $BASH_VERSION /bin/bash 2.05b.0(1)-release
- A hozzászóláshoz be kell jelentkezni
Ezt most komolyan kerdezted?
http://www.gnu.org/software/bash/manual/bashref.html
...
[[...]]
[[ expression ]]
Return a status of 0 or 1 depending on the evaluation of the conditional
expression expression. Expressions are composed of the primaries described
below in 6.4 Bash Conditional Expressions. Word splitting and filename
expansion are not performed on the words between the `[[' and `]]'; tilde
expansion, parameter and variable expansion, arithmetic expansion, command
substitution, process substitution, and quote removal are performed.
Zsiraf
- A hozzászóláshoz be kell jelentkezni
Komolyan, ui. :
fules@chaos:~$ if [[ "asdf" =~ "^a" ]]; then echo "igen"; else echo "nem"; fi bash: conditional binary operator expected bash: syntax error near `=~' fules@chaos:~$ bash --version GNU bash, version 2.05b.0(1)-release (i386-pc-linux-gnu) Copyright (C) 2002 Free Software Foundation, Inc.
legalábbis ennél a bash-verziónál az '=~' operátor nem tűnik érvényesnek, a 'test' parancsnál sem, egyik manpage sem írja, sőt mi több, a 'regular' szó is csak a 'regular file' összetételben szerepel, a 'regex' pedig abszolute nem.
Te milyen verziójú bash-t használsz?
- A hozzászóláshoz be kell jelentkezni
http://en.wikipedia.org/wiki/Bash#In-process_regular_expressions
...
In-process regular expressions
bash 3.0 supports in-process regular expression matching using the following syntax, reminiscent of Perl:
[[ string =~ regex ]]
...
Zsiraf
p.s.: ja, a 3.0 mar 2004-Aug-03 ota elerheto az ftp.gnu.org-rol... :-)
- A hozzászóláshoz be kell jelentkezni
Aha, köszi, szép. Jó dolog ez a bash3, lassan ideje lesz kimúlnia a 2-esnek.
- A hozzászóláshoz be kell jelentkezni
Erdekelne, hogyan tudom ellenorizni, hogy pl. letezeik-e *valami*?
if [ -f *valami* ]-ra pofazni fog. Van otletetek? ha idezojelbe teszem, akkor mindig hamis lesz.
Koszi elore is.
---
Hey! Where'd my terminal go?
- A hozzászóláshoz be kell jelentkezni
Elvileg minden olyan dolog jó lehet, ami vagy visszatérési értékkel vagy az outputjával jelzi a létezést.
Példák:
if find *valami* -maxdepth 0 2>/dev/null >&2; then ...
if stat *valami* 2>/dev/null >&2; then ...
if ls *valami* 2>/dev/null >&2; then ...
Vagy ugyanezek másképpen:
[ "$(find *valami* -maxdepth 0) 2>/dev/null" ]
[ "$(stat *valami* 2>/dev/null)" ]
[ "$(ls *valami* 2>/dev/null)" ]
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Triviális kérdés.
Hogyan tudok két műveletet összevonni?
Konkréten egy kis iso mountoló/unmountoló scriptről lenne szó:
#!/bin/bash
if [ -d "/mnt/dvd/" ]; then
gksu umount "/mnt/dvd/"
gksu rmdir "/mnt/dvd/"
Xdialog --title "MountISO" --msgbox "ISO lecsatlakoztatva" 5 60
else
if [ -e "$1" ]; then
gksu mkdir "/mnt/dvd"
gksu "mount -o loop -t iso9660 '$1' '/mnt/dvd/'"
thunar "/mnt/dvd/"
fi
fi
Ez így működik, csak egy leválasztáshoz vagy csatlakoztatáshoz kétszer kéri be a jelszót, ezért szeretném egy egy gksu alá vonni a 4 műveletet.
- A hozzászóláshoz be kell jelentkezni
su -c 'umount /mnt/dvd ; rmdir /mnt/dvd'
talan a `gksu`-nak is van -c kapcsoloja.
A.
- A hozzászóláshoz be kell jelentkezni
Minek az mkdir/rmdir?
A megoldas egy masik script, esetleg egy par soros fuggveny (function) a scriptben, es annak a meghivasa gksu-val ;-)
- A hozzászóláshoz be kell jelentkezni
Elején én is azt hittem, hogy nem kell.
De a leválasztáshoz meg kell nézni, hogy van-e /mnt/dvd/,ha van akkor umount, ha nincs akkor mount. Ha nem lenne rmdir és mkdir akkor csak egy művelet hajtódna végre, az umount.
Egyébként nincs -c opciója a gksunak.
Szerk.:
Thunarban csináltam egy új műveletet az umountnak, aztán csináltam egy másik scriptet. Már csak annyi a szépséghiba, hogy akkor is kiírja lecsatlakoztatva szöveget, ha mégsemre nyomok jelszóbeírásnál. :)
- A hozzászóláshoz be kell jelentkezni
(mount | grep "/mnt/dvd" > /dev/null && umount /mnt/dvd) || echo "nincs mountolva"
és nem kell törölgetni
___
info
- A hozzászóláshoz be kell jelentkezni
Ezt hogy paraméterezem a gksuval?
Konkrétan ez egy Mount/Umount iso fájlmenürész lenne a Thunarban, hogy ne kelljen állandóan terminalból megcsinálni. Amit ebből barkácsoltam.
- A hozzászóláshoz be kell jelentkezni
Sziasztok.
Bash programozást tanulok egy redhat referenciából. A könyvbe az van, hogy a
set -o noclobber paranccsal bekapcsolom, hogy ne írja felül az állományt ha erre parancsot adok. De kivétel ha >! kimenetet használok, mert az felülírja a noclobbert. Ehhez képest ezt a választ kapom >! esetén: "bash: !: cannot overwrite existing file
" Ha kikapcsolom a noclobbert (set +o noclobber) akkor engedi.
Mi a baj? vagy régi a referencia és ez már nem élő dolog?
- A hozzászóláshoz be kell jelentkezni
nem >! hanem >| (pipe) :)
- A hozzászóláshoz be kell jelentkezni
Így működik. Köszi ;)
(nem néztem el amugy, ebbe a vacakba tényleg ! van.)
- A hozzászóláshoz be kell jelentkezni
signup
-------------
Regényeim:
http://adlibrum.hu/Poliverzum/
http://www.novumverlag.hu/novitaeten/8/?product_id=22&detail=1
:::A #86-os sorszámú hivatalosan bejegyzett GoboLinux felhasználó
- A hozzászóláshoz be kell jelentkezni