Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[solved] Schleife in Bash mit führenden Nullen
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 2541
Location: de

PostPosted: Sat Sep 10, 2011 3:33 pm    Post subject: [solved] Schleife in Bash mit führenden Nullen Reply with quote

Hallo,

wenn man in der Bash eintippt:
Code:
echo {001..003}

bekommt man als Ergebnis:
Code:
001 002 003


Jetzt würde ich die Iterationsangaben gern durch Variablen ersetzen:
Code:
export $BLUBB="003"
echo {001..$BLUBB}


Ausgabe ist dann:
Code:
{001..003}

Wie bekomm ich die gewünschte Iteration hin? Ach ja, die führenden Nullen sind mir wichtig. Ansonsten hätte der Weg über for i in `seq 1 3` funktioniert.


Last edited by musv on Sun Sep 11, 2011 5:49 pm; edited 1 time in total
Back to top
View user's profile Send private message
disi
Veteran
Veteran


Joined: 28 Nov 2003
Posts: 1354
Location: Out There ...

PostPosted: Sat Sep 10, 2011 4:09 pm    Post subject: Reply with quote

Das sollte funktionieren:
Code:
BLUBB=003; seq -s" " -f "%03g" $BLUBB

_________________
Gentoo on Uptime Project - Larry is a cow


Last edited by disi on Sat Sep 10, 2011 9:06 pm; edited 1 time in total
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 3798

PostPosted: Sat Sep 10, 2011 8:12 pm    Post subject: Reply with quote

Code:
eval "echo {001..$BLUBB}"

Aber aufpassen, dass BLUBB wirklich nur Zahlen enthält und nicht zum Exploit führen kann, etwa durch vorheriges Ausführen des folgenden Codes:
Code:
case "${BLUBB}" in
*[^0-9]*) echo "BLUBB enthält nicht nur Ziffern"; exit 1;;
esac
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Sun Sep 11, 2011 9:51 am    Post subject: Reply with quote

Code:
>bar=003
>echo {001..${bar}}
001 002 003

Allerdings zsh (mir ist immer noch unklar, wieso man die bash einsetzen sollte).
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 3798

PostPosted: Sun Sep 11, 2011 9:58 am    Post subject: Reply with quote

Knieper wrote:
(mir ist immer noch unklar, wieso man die bash einsetzen sollte)

Volle Zustimmung: Entweder man will volle POSIX Kompatibilität - dann nimmt man die dash - oder man will Luxus - dann nimmt man die zsh. Ein Verzicht auf Kompatibilität ohne großen Luxusgewinn und dafür mit hohem Verlust an Geschwindigkeit und Speicher ergibt keinen Sinn :wink:
Back to top
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 2541
Location: de

PostPosted: Sun Sep 11, 2011 5:49 pm    Post subject: Reply with quote

Hab die Version von disi genommen. Vielen Dank.

Find ich klasse, dass man seq quasi als printf verunstalten kann. Wieder was gelernt.
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Sun Sep 11, 2011 6:18 pm    Post subject: Reply with quote

mv wrote:
Knieper wrote:
(mir ist immer noch unklar, wieso man die bash einsetzen sollte)

dafür mit hohem Verlust an Geschwindigkeit und Speicher ergibt keinen Sinn :wink:

Dash nehme ich nur für portable Skripte und früher mal als login-Shell. Zwischen bash und zsh ist ressourcentechnisch kein wirklicher Unterschied, beide ungefähr 6·dash. Die Zeit, die man mit zsh spart, ist es wert zu wechseln. Noch lieber wäre mir allerdings eine komplette Neuentwicklung, statt dieser Stringschieberei mit inkonsistenten Parametern.
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 3798

PostPosted: Sun Sep 11, 2011 7:08 pm    Post subject: Reply with quote

Knieper wrote:
Zwischen bash und zsh ist ressourcentechnisch kein wirklicher Unterschied, beide ungefähr 6·dash.

zsh benötigt bei mir nur etwa 70% des Speichers der bash und ist etwa doppelt so schnell (und damit ungefähr so schnell wie die dash):
Code:
zsh -c "for i in {1..10000}; do true | true; done"  # 1.20s user 3.25s system 57% cpu 7.774 total
bash -c "for i in {1..10000}; do true | true; done" # 1.18s user 6.06s system 45% cpu 15.755 total
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Sun Sep 11, 2011 7:46 pm    Post subject: Reply with quote

mv wrote:
zsh benötigt bei mir nur etwa 70% des Speichers der bash

Bei mir etwas mehr, das ist log'weise konfigurationsabhängig.

Quote:
Code:
zsh -c "for i in {1..10000}; do true | true; done"  # 1.20s user 3.25s system 57% cpu 7.774 total
bash -c "for i in {1..10000}; do true | true; done" # 1.18s user 6.06s system 45% cpu 15.755 total

Code:
0.39s user 2.38s system 50% cpu 5.465 total
0.75s user 4.12s system 24% cpu 19.612 total

Solch einen Unterschied hätte ich nicht erwartet...
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
musv
Advocate
Advocate


Joined: 01 Dec 2002
Posts: 2541
Location: de

PostPosted: Sun Sep 11, 2011 7:57 pm    Post subject: Reply with quote

Knieper wrote:
(mir ist immer noch unklar, wieso man die bash einsetzen sollte)

Gewohnheit

mv wrote:
Ein Verzicht auf Kompatibilität ohne großen Luxusgewinn und dafür mit hohem Verlust an Geschwindigkeit und Speicher ergibt keinen Sinn :wink:

Die Geschwindigkeit spielt bei meinem Script nicht wirklich eine Rolle. Es soll einfach ein paar Dateien zählen und mir die fehlenden Parts ausgeben. Dafür reicht mir auch die Bash.

Zsh ist installiert. Aber ehrlichgesagt komm ich mit der zsh noch nicht wirklich klar. Hab mich halt an die Bash gewöhnt.
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 3798

PostPosted: Sun Sep 11, 2011 8:55 pm    Post subject: Reply with quote

musv wrote:
Die Geschwindigkeit spielt bei meinem Script nicht wirklich eine Rolle.

Das ist auch nur ein meist unwesentlicher von vielen anderen Nachteilen - oder sagen wir besser: mangelnden Vorteilen.
Quote:
Es soll einfach ein paar Dateien zählen und mir die fehlenden Parts ausgeben. Dafür reicht mir auch die Bash.

"Reichen" täte mit Sicherheit auch die dash. Aber gerade so Array-Dinger gehen in der zsh oft mit ein oder zwei Operationen (mit geeigneten Flags), während Du in der Bash händisch verschachtelte Schleifen durchlaufen musst u.ä. - und selbst das nicht so flexibel geht, wie Du hier im Thread gesehen hast, weil die Expansions-Funktionen beschränkter sind.
Und was Gewohnheit betrifft: Außer, dass man sich bewusst sein sollte, dass sich Variablen aus Bash-Sicht automatisch wie Arrays verhalten (wenn Du sie nicht mit ${=VAR} ansprichst), verhält sich die zsh beim Programmieren eigentlich "abwärtskompatibel" zu bash, nur dass man i.W. Zugriff auf viele neue Möglichkeiten hat...
Back to top
View user's profile Send private message
disi
Veteran
Veteran


Joined: 28 Nov 2003
Posts: 1354
Location: Out There ...

PostPosted: Mon Sep 12, 2011 7:34 am    Post subject: Reply with quote

Ich habe Gestern mal meinen User und Root auf zsh in Gentoo umgestellt. Erstmal muss man eine vernuenftige .zshrc anlegen, damit man z.B. 'End','Home','Del' usw. benutzen kann, einen Alias fuer ls damit Farben angezeigt werden und dann diese tolle Sache eine farbige Gentoo PS1 zu bekommen :)

Dann habe ich geguckt und das hier gefunden:
http://zsh.sourceforge.net/FAQ/zshfaq02.html

Da habe ich mich gleich aufgemacht und konnte viele Einstellungen auf meinem FreeBSD csh uebernehmen :)
Folgendes funktioniert uebrigends einwandfrei in csh und zsh:
Code:
alias newcmd 'list of commands'


Das Vervollstaendigen von Befehlsoptionen ist schon geil (ich glaube bash hat etwas aehnliches, aber hatte ich nie benutzt).
Ansonsten konnte ich kaum Unterschiede feststellen, habe aber auch nicht viel gemacht ausser Dateien kopiert... die kleinen Skripte die ich gebastelt habe (wie Ordner synchronisieren, Videos umwandeln, Systemoptionen aendern etc.) sind alle sehr simple und da habe ich sowieso #!/bin/sh angegeben.
/bin/sh hatte ich noch auf /bin/dash gelinkt, um zu sehen ob das System noch tut und alle Skripts laufen :D

Mal guggn...
_________________
Gentoo on Uptime Project - Larry is a cow
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 3798

PostPosted: Mon Sep 12, 2011 7:55 pm    Post subject: Reply with quote

disi wrote:
Das Vervollstaendigen von Befehlsoptionen ist schon geil (ich glaube bash hat etwas aehnliches, aber hatte ich nie benutzt).

Ja, es gibt mittlerweile die bash-completion. Aber die ist schon sehr primitiv, sowohl aus Programmierersicht (beispielsweise müssen die Funktionen grundsätzlich für alle Kommandos in allen Shells geladen werden, weil es das Autoload-Konzept ("Nachladen bei Bedarf") in der bash nicht gibt) als auch aus Anwendersicht: Aus einem Menü auszuwählen statt nur eine Liste zu sehen, ist schon luxuriös. Großer Nachteil der zsh: Die Defaults sind besch...eiden. Man muss alles erst aktivieren. Als kleines Beispiel: In meiner zsh werden bei interaktiven Shells u.a. folgende Kommandos ausgeführt:
Code:
setopt noautocd autopushd cdablevars nochasedots nochaselinks
setopt pathdirs autonamedirs bashautolist promptsubst
setopt histignorealldups histreduceblanks histverify nohistexpand
setopt extendedglob histsubstpattern
setopt nodotglob nonomatch nonullglob numericglobsort noshglob
setopt mailwarning interactivecomments noclobber
setopt nobgnice nocheckjobs nohup longlistjobs monitor notify printexitvalue

NULLCMD=:
READNULLCMD=less
ttyctl -f

autoload -Uz is-at-least compinit
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' completer _expand _complete _expand_alias
zstyle ':completion:*' menu select=1 # interactive
zstyle ':completion:*' original true
zstyle ':completion:*' remote-access false
zstyle ':completion:*' use-perl true
zstyle ':completion:*' verbose true
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*' accept-exact-dirs true
zstyle ':completion:*' path-completion false
zstyle ':completion:*' squeeze-slashes true
if is-at-least 4.3.10
then   zstyle ':completion:*' format "%B%F{yellow}%K{blue}%d%k%f%b"
else   zstyle ':completion:*' format "%B%d%b"
fi
compinit -D -u

Vieles ist natürlich Geschmackssache (gerade die Optionen bitte nicht unverstanden übernehmen: Einige Defaults habe ich Bash-ähnlich gemacht, weil ich mich in einigen Punkten nicht umgewöhnen wollte).
Nur ein Beispiel für dieses Setting "cp [3 x Tab]" - und schon kann man aus einem colorierten Directory-Listing mit Cursortasten die Files auswählen (hoffe ich - ev. benötigt man noch einige "bindkey"-Kommandos dazu, die ich jetzt nicht alle hier kopieren wollte...)
Back to top
View user's profile Send private message
Necoro
Veteran
Veteran


Joined: 18 Dec 2005
Posts: 1912
Location: München (Germany)

PostPosted: Mon Sep 12, 2011 8:22 pm    Post subject: Reply with quote

Nett an der zsh (u.a.): VCS-Informationen (zB SVN, hg, bzr, git, ...) im Prompt (Screenshot). Insbesondere für "auf welchem Branch bin ich gerade" und "gibt es uncommittete / nicht indizierte (git) Änderungen" (zB das "*" und das "U" auf dem Screenshot).

For the interested non-googler: Mein dazu benutzter Code:

Code:
# vcs stuff for prompt
setopt prompt_subst

if [[ $ZSH_VERSION == 4.3.<->* ]]; then
    autoload -Uz vcs_info

    zstyle ":vcs_info:*" enable bzr cvs svn git hg
    zstyle ":vcs_info:*" formats "%B%{$fg[yellow]%}[%{$fg[green]%}(%u%c) %{$fg[yellow]%}%b:%1.7i%f%%b (%s)%B%{$fg[yellow]%}]%f%%b"
    zstyle ":vcs_info:*" branchformat "%b"
    zstyle ":vcs_info:*" get-revision true
    zstyle ":vcs_info:*" check-for-changes true
    zstyle ":vcs_info:*" max-exports 1
   
    # hg stuff
    zstyle ":vcs_info:hg:*" unstagedstr '*'
    zstyle ":vcs_info:hg:*" hgrevformat '%r'

    # bzr stuff
    zstyle ":vcs_info:bzr:*" unstagedstr '*'
    zstyle ":vcs_info:bzr:*" use-simple true

    RPROMPT='${vcs_info_msg_0_:+"${vcs_info_msg_0_} "}'"${RPROMPT}"
else
    vcs_info () {} # dummy
fi

# ...

precmd()
{
        echo -ne "\033]0;${USER}@$(hostname):${PWD/$HOME/~}\007";
        promptnl
        vcs_info # <-- die einzig wichtige Zeile
}


(Mehr ZSH-Anregungen hab ich dort: https://git.necoro.eu/dotfiles.git/tree/.zsh )
_________________
Inter Deum Et Diabolum Semper Musica Est.
Back to top
View user's profile Send private message
disi
Veteran
Veteran


Joined: 28 Nov 2003
Posts: 1354
Location: Out There ...

PostPosted: Tue Sep 13, 2011 8:02 am    Post subject: Reply with quote

Ich werde da auf jeden Fall mal tiefer einsteigen, danke :)
_________________
Gentoo on Uptime Project - Larry is a cow
Back to top
View user's profile Send private message
Yamakuzure
Veteran
Veteran


Joined: 21 Jun 2006
Posts: 1238
Location: Bardowick, Germany

PostPosted: Tue Sep 13, 2011 9:59 am    Post subject: Reply with quote

Ja, die zsh ist toll. Nur schade das (schon wieder) ein Thread mit zsh-fan-werbe-blablah zugemüllt wurde. Entschuldigt euch wenigstens beim OP. Völlig egal ob ihr Recht habt, oder nicht. Schon wieder so ein unpassendes Gelaber wie unglaublich schlecht die Bash doch sei (schon klar) nervt. Egal um wie viele Längen die zsh besser ist. Wenn man das, was an der zsh besser ist nicht benötigt, ist es sowas von Wurscht. Und damit einen Thread, in dem es um etwas völlig Anderes geht vollzuschwallern ist einfach extrem unhöflich.
_________________
I *do* know that I easily aggravate people due to my condensed writing. Rule of thumb: If I wrote anything that can be understood in two different ways, and one way offends you, then I meant the other! ;)
Back to top
View user's profile Send private message
metal1ty
Veteran
Veteran


Joined: 21 Apr 2005
Posts: 1292

PostPosted: Tue Sep 13, 2011 10:30 am    Post subject: Reply with quote

Naja..als Info ist es ja ganz nett. Ansonsten einfach einen ZSH Werbe und Fanthread eröffnen und los gehts ! :twisted:
_________________

Licht und Wahrheit
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Tue Sep 13, 2011 11:21 am    Post subject: Reply with quote

Yamakuzure wrote:
Entschuldigt euch wenigstens beim OP.

Dh. Du willst aus einem solved-Thema mit Alternativvorschlägen einen Metameckerthread machen? Sehr geistreich.
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 3798

PostPosted: Tue Sep 13, 2011 7:38 pm    Post subject: Reply with quote

Yamakuzure wrote:
Entschuldigt euch wenigstens beim OP. [...] Schon wieder so ein unpassendes Gelaber

Entschuldigung? Unpassendes Gelaber? Weil anstelle des von mir vorgeschlagenen Bash-Würgarounds eine funktionierende Lösung ohne Sicherheitsprobleme vorgeschlagen wurde?
Quote:
Wenn man das, was an der zsh besser ist nicht benötigt,

...dann hat man sehr wenig Erfahrung mit der Shell, und es schadet dann erst recht nicht, eine Shell zu nehmen, in der einfach mehr geht. Im Zweifelsfall besteht der "Verlust" darin, dass man dann eine Shell benutzt, die einfach nur schneller ist.
xlayre wrote:
Ansonsten einfach einen ZSH Werbe und Fanthread eröffnen

Einen solchen gibt es. Das Problem bei solchen Threads ist aber, dass ihn nur Leute lesen, die die zsh sowieso schon benutzen. Andere Leute (so wie ich früher auch) schauen in einen solchen Thread nicht hinein und stoppseln weiter mit der bash rum, unwissend, dass es viel Besseres gibt. Ich möchte anderen halt den Frust ersparen, den ich nach Jahren Bash hatte, als ich entdeckte, dass die zsh alles gekonnt hätte, was mich gestört hatte, dies aber nur nicht per Default-Konfiguration aktiviert war.
Jetzt wird es aber wirlich OT. :wink:
Back to top
View user's profile Send private message
metal1ty
Veteran
Veteran


Joined: 21 Apr 2005
Posts: 1292

PostPosted: Wed Sep 14, 2011 6:50 am    Post subject: Reply with quote

Ich kann sowieso nicht nachvollziehen, was die ständigen Gnome/KDE, zsh/bash u.s.w. Flamewars bringen sollen. Streitet euch doch nicht über unsinne Kleinigkeiten.

Ich werde die zsh auch mal ausprobieren. Nur weil ich bisher die bash genutzt habe, ist die zsh kein No-Go.
_________________

Licht und Wahrheit
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Wed Sep 14, 2011 7:15 am    Post subject: Reply with quote

xlayre wrote:
Streitet euch doch nicht über unsinne Kleinigkeiten.

Hast Du ein anderes Thema gelesen? Hier streitet doch niemand. Es wurde nur eine bessere Lösung propagiert und eine Shell, die einem viel Arbeit abnimmt.
_________________
Je dümmer desto Gnome/KDE.
Back to top
View user's profile Send private message
metal1ty
Veteran
Veteran


Joined: 21 Apr 2005
Posts: 1292

PostPosted: Wed Sep 14, 2011 7:20 am    Post subject: Reply with quote

Knieper wrote:
Hast Du ein anderes Thema gelesen? Hier streitet doch niemand. Es wurde nur eine bessere Lösung propagiert und eine Shell, die einem viel Arbeit abnimmt.


Yamakuzure wrote:
Entschuldigt euch wenigstens beim OP. [...] Schon wieder so ein unpassendes Gelaber

Der ganze Post war zumindest zänkisch geschrieben. Vielleicht hast du ihn ja auch nur überlesen / nicht ganz gelesen.
_________________

Licht und Wahrheit
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum