1 2 3 4 5 | # Of env | grep SHELL # en ter overbodigheid grep username /etc/passwd | awk -F\/ '{print $NF}' |
1 2 3 4 | $ bash $ echo $SHELL /bin/zsh |
1 |
1 2 3 4 5 6 7 | CHARS=(t v p) for C in ${CHARS[@]} do echo -n $C done echo '' |
apt-get install humor?quote:Op maandag 14 januari 2008 12:11 schreef Daniel1976 het volgende:
Daarbij zijn dat commando's die zo ontzettend zielig zijn om te roepen in dit soort topics.quote:Op maandag 14 januari 2008 12:14 schreef Slarioux het volgende:
Dat kan je je postrechten kosten Daniel. Zeg maar voor altijd.
nee, dit kost je postrechten:quote:Op maandag 14 januari 2008 12:14 schreef Slarioux het volgende:
Dat kan je je postrechten kosten Daniel. Zeg maar voor altijd.
mietje slarquote:Op maandag 14 januari 2008 12:54 schreef slacker_nl het volgende:
nee, dit kost je postrechten:
Wat doet 't ofzo? Ik ken niks van code dus zou wel graag weten wat 't is voor ik 't eens uitprobeerquote:
Deze code print de letters TVP op je console.quote:Op woensdag 16 januari 2008 13:52 schreef tony_clifton- het volgende:
[..]
Wat doet 't ofzo? Ik ken niks van code dus zou wel graag weten wat 't is voor ik 't eens uitprobeer
Niet perse natuurlijk, deze code kan je ook gewoon in terminal inkloppen en dan moet het ook werken. Maar in een file is het idd makkelijker, vooral als je moet gaan editten :)quote:Op woensdag 16 januari 2008 13:57 schreef whoops het volgende:
[..]
Deze code print de letters TVP op je console. :)
Om dit de draaien moet je die code in een bestand opslaan (bijvoorbeeld filename.sh), dan met de terminal naar de directory waar het in staat en dan 'chmod +x filename.sh', en uitvoeren door ./filename.sh uit te voeren.
1 2 3 4 5 6 7 8 | 16:03 pts/9 0 wesleys@eniac:/home/wesleys$ which enter enter () { echo "Enter the shell" } 16:03 pts/9 0 wesleys@eniac:/home/wesleys$ enter Enter the shell 16:03 pts/9 0 wesleys@eniac:/home/wesleys$ |
De makkelijkste manier om dit te doen is overigens zo:quote:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # Define backtitle BACKTITLE="Nice message you got here!" # Define header text HEADER="This text acts like a header!" # Define box format, Height, Width, List Height SIZE_H=20 SIZE_W=50 SIZE_L=30 dialog --backtitle "$BACKTITLE" --checklist "$HEADER" $SIZE_H $SIZE_W $SIZE_L \ "Choice 1" "Description One!" ON \ "Choice 2" "Second Description!" ON \ "Choice 3" "Third and Last!" OFF \ 2> /tmp/checklist.tmp.$$ retval=$? choice=`cat /tmp/checklist.tmp.$$` rm -f /tmp/checklist.tmp.$$ case $retval in 0) if [ -n "$choice" ] then echo "You chose: $choice" else echo "Can't choose?" fi;; 1) echo "Cancel pressed.";; 255) echo "ESC pressed.";; esac |
1 2 3 4 | SIZE_H=20 SIZE_W=50 SIZE_L=3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # Define backtitle BACKTITLE="'Nice message you got here!'" # Define header text HEADER="'This text acts like a header!'" # Define box format, Height, Width, List Height SIZE_H=20 SIZE_W=50 #SIZE_L=3 choices[0]="'Choice 1' 'Description one!' ON" choices[1]="'Choice 2' 'Description two!' ON" choices[2]="'Choice 3' 'Description three!' OFF" choices[3]="'Choice 4' 'Description four!' ON" choices[4]="'Choice 5' 'Description five!' ON" SIZE_L=${#choices[@]} for ((a=0; a < SIZE_L ; a++)); do line="$line ${choices[$a]}" done choice=$(eval dialog --stdout --backtitle $BACKTITLE --checklist $HEADER $SIZE_H $SIZE_W $SIZE_L $line); retval=$? case $retval in 0) if [ -n "$choice" ] then echo "You chose: $choice" else echo "Can't choose?" fi;; 1) echo "Cancel pressed.";; 255) echo "ESC pressed.";; esac |
1 |
1 2 3 4 5 6 7 8 9 10 | CONFIG_FILE_A='/home/whoops/.server-control' CONFIG_FILE_B='~/.server-control' echo $CONFIG_FILE_A echo $CONFIG_FILE_B if [ -f "$CONFIG_FILE_A" ]; then echo "A exists"; fi if [ -f "$CONFIG_FILE_B" ]; then echo "B exists"; fi |
Je haalt nu twee dingen door elkaar;quote:Op dinsdag 24 juni 2008 18:45 schreef whoops het volgende:
Ik heb 2 vragen.
1: is er een makkelijkere manier om $i met 1 op te hogen?
[ code verwijderd ]
quote:2: In onderstaande code wil ik een dot-file uit m'n homedir inlezen, ik kan deze waarde echter niet variabel maken. Hoe krijg ik dat voor elkaar?
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 | CONFIG_FILE_A="$HOME/.env.local" CONFIG_FILE_B="~/.env.local" for i in $CONFIG_FILE_A $CONFIG_FILE_B ; do if [ -f "$i" ]; then echo "'$i' exists"; # Pick any . $i source $i fi done |
Dit is overigens heel erg niet-portable naar ‘sh’ op deze manier. Als je een shell-script moet maken dat onder sh werkt, kun je dit niet gebruiken (daar heb je andere trucs voor, met eval, maar daar begin ik liever niet over.)quote:Op donderdag 19 juni 2008 01:41 schreef slacker_nl het volgende:
Gebruik van arrays
[ code verwijderd ]
Nu weet ik dat whoops 99,9% bash code schrijft, en ik weet ook dat ie in 99,99% geen sh compatible code nodig heeftquote:Op dinsdag 24 juni 2008 19:44 schreef Iblis het volgende:
[..]
Dit is overigens heel erg niet-portable naar ‘sh’ op deze manier. Als je een shell-script moet maken dat onder sh werkt, kun je dit niet gebruiken (daar heb je andere trucs voor, met eval, maar daar begin ik liever niet over.)
quote:Op dinsdag 24 juni 2008 19:24 schreef slacker_nl het volgende:
i=$((i + 1))
Dit waren degene die ik zocht, thanks slack...quote:$HOME gebruiken
Je moet dan ‘eval’ gebruiken. eval is een built-in commando dat de argumenten evalueert als waren ze een string in een shell-script.quote:Op dinsdag 24 juni 2008 19:47 schreef slacker_nl het volgende:
Maar hoe zou je dit, voor de lol, in sh compatibel code willen doen dan?
1 2 3 | bar=baz eval echo \$$foo |
1 |
1 2 3 4 5 6 7 | foo1="foo one" foo2="foo two" foo3="foo three" for i in 0 1 2 3; do eval echo \$foo$i; done; |
Het gebruiken van eval doet slacker ook al in zijn antwoord op mijn vraag hierboven...quote:Op dinsdag 24 juni 2008 20:47 schreef Iblis het volgende:
[..]
Je moet dan ‘eval’ gebruiken. eval is een built-in commando dat de argumenten evalueert als waren ze een string in een shell-script.
B.v.
[ code verwijderd ]
De eerste twee regels zijn duidelijk, de derde werkt als volgt: eerst worden de argumenten van het commando ‘eval’ geëvalueerd, dus dat wordt in feite:
[ code verwijderd ]
En dan wordt ‘echo $bar’ geëvalueerd, wat ‘baz’ levert. Zo gaat het ook met je arrays:
[ code verwijderd ]
Dit kan heel traag worden als je b.v. meerdere indices gebruikt, het eval-commando is namelijk vrij traag.
Ik had al het vermoeden dat je deze methode zou gaan gebruiken. Heb hem ook overwogen in eerste instantie, maar vond de array feature veel handigerquote:Op dinsdag 24 juni 2008 20:47 schreef Iblis het volgende:
Dit kan heel traag worden als je b.v. meerdere indices gebruikt, het eval-commando is namelijk vrij traag.
1 2 3 4 5 6 7 8 9 10 | if [ -n "$1" ] ; then CHOICES="$CHOICES $1" LIMIT=$((LIMIT + 1)) #LIMIT=`expr $LIMIT + 1` else CHOICES="" LIMIT=0 fi } |
Goeie zaak, want ik had dit topic nog niet eerder opgemerkt!quote:Op donderdag 28 augustus 2008 11:37 schreef Jo0Lz het volgende:
Centraal.
Het kan ook erger (spreek ik uit ervaring... 8)7 8)7 ):quote:Op maandag 14 januari 2008 11:22 schreef slacker_nl het volgende:
Big fucking warning
Ga nooit "leuk" zijn en mensen vertellen dat ze rm -rf /, moeten uitvoeren, dit wordt ZWAAR bestraft door de mods @hier en terecht. Voor de mensen die niet precies weten wat dit doet: rm -rf is een recursive, geforcede delete (rm == remove) actie op de root van je systeem. Mocht je als root zijn ingelogd dan verwijder je alle bestanden van je systeem en zal je snel merken dat je PC niet meer boot en je al je data kwijt bent. Mocht je een gewone user zijn en dit uitvoeren, dan heb je grote kans dat je homedir pleitte is, en andere bestanden buiten je $HOME, waar jij de eigenaar voor bent en/of group schrijfrechten voor hebt. Voer dit daarom dan ook NOOIT uit (tenzij je pijn leuk vind of als je in een virtuele omgeving zit waar dataverlies niet uitmaakt). Als we een post vinden waarin we dit zien, kijk er dan niet raar vanop dat je niet meer kan posten in DIG, of op heel Fok for that matter. U bent gewaarschuwd!
1 |
rm zelf doet niets met ‘.*’, het is de shell die zo’n pattern matcht en vervang door een lijst van bestanden die eraan voldoen. De Kornshell laat . en .. niet matchen op .*, bash echter soms wel, afhankelijk van de waarde van $GLOBIGNORE. Als je rm -rf .. intypt zal het nog steeds misgaan.quote:Op donderdag 28 augustus 2008 13:22 schreef RemcoDelft het volgende:
Ondertussen is "rm .*" zo slim om te zeggen dat-ie . en .. negeert
Moraal van het verhaal: Unix/Linux doet precies wat je zegt, maar pas altijd op wat je zegt
1 2 3 4 5 6 7 | regex="};" if [[ "$string" =~ $regex ]]; then echo "Jay, ik heb ${#BASH_REMATCH[*]} keer een }; gevonden"; else echo "He verdorie, niets.."; fi |
1 2 3 | nr=`echo "$string" | tr "{" "\n" | wc -l` let nr=nr-1; |
1 2 3 4 5 | $ echo "$string" | tr "}" "\n" | wc -l 8 $ echo "$string" | tr "{" "\n" | wc -l 8 |
Klopt, echter is de sluit "tag" }; dus inclusief de ;quote:Op dinsdag 23 september 2008 10:07 schreef whoops het volgende:
Volgens mij werkt je methode met tr en wc wel hoor.
[ code verwijderd ]
Ik zou overigens niet weten of het efficienter kan.
1 2 3 4 5 6 7 8 9 | nstring=$(echo $string | tr -d -C '{};') leftcount=$(echo $nstring | grep -o '{' | wc -l) rightcount=$(echo $nstring | grep -o '}' | wc -l) if echo "$nstring" | grep -q '};$' && test $leftcount -eq $rightcount; then echo 'bingo'; else echo 'jammer' fi; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | counter = 0; done = 0; } { for (i = 1; i <= length($0); i++) { c = substr($0, i, 1); if (c== "{") { counter++ done = 0; } else if (c == "}") { if (counter == 0) { print "Meer } dan { gevonden!"; exit 1; } counter--; } else if (c == ";" && counter == 0) { done = 1; } } } END { if (counter > 0) { print "Enkele { zijn niet afgesloten!"; exit 1; } if (!done) { print "Geen afsluitende ';' gevonden!" exit 1; } print "Alles in orde." } |
Bedankt voor de reactie, Ik probeer de Named.Conf.Local te parsen van BIND. Hierbij is het nodig dat ik fouten probeer te voorkomen waar dit mogelijk is. Voorbeeld van invoer:quote:Op donderdag 25 september 2008 16:40 schreef Iblis het volgende:
Met AWK kun je nagenoeg hetzelfde als met Perl, zij het vaak iets minder beknopt. Zie onderstaande code. BEGIN wordt uitgevoerd voordat de input wordt gelezen, END altijd nadat alle input is gelezen, en het blok ertussen voor elke regel. Hij scant dus elke regel karakter voor karakter op '}', als de haakjes uit balans zijn komt er een error. Na de laatste } moet een ';' komen. Er is één catch, de input die alleen uit ';' bestaat wordt óók goedgekeurd. Daar kun je misschien expliciet op checken.
Je runt het met awk -f 'bestand' en kunt er dan gewoon via stdin input instoppen.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | Maar ook: zone "asdf.net" { type master; file "/etc/bind/zones/asdf.net.db";}; zone "asdf.com" { //some comment here type master; file "/etc/bind/zones/asdf.com.db"; allow-transfer { none; } ; }; |
Op dit moment ben ik niet zeker of het de newline character is wat zo loopt te klieren. Wanneer ik het wil echoen op het scherm, krijg ik gewoon een spatie, maar hij word niet gematcht door de \s teken. Ik zal wat meer debuggen en dan kom ik hier op terug.quote:Op zondag 28 september 2008 21:58 schreef Iblis het volgende:
Newlines in reguliere expressies matchen is meestal gewoon ‘\n’, maar veel tools scheiden impliciet op ‘\n’, zodat er dus nooit een ‘\n’ in je string komt. Als je dit weet echter kun je toch simpelweg (in termen van AWK) records inlezen, wat in de praktijk op regels neerkomt, en kijken of die records alleen spaties bevatten. Die records c.q. regels zelf moeten dan wel door ‘\n’ gescheiden zijn.
1 2 3 | echo $bla . ./CS01.WANA-EAS.FI.2008.048.v02.csv ./CS01.BBDD-DSL.FI.2008.018.v02.csv ./rrd.ppt |
1 2 3 4 5 6 | echo $bla . ./CS01.WANA-EAS.FI.2008.048.v02.csv ./CS01.BBDD-DSL.FI.2008.018.v02.csv ./rrd.ppt |
Kan ook zonder de -print. Gebruik ze beide. Maar ik hoef niet over find te loopen.quote:Op dinsdag 23 december 2008 14:38 schreef RemcoDelft het volgende:
Waarom find . -print? Doet dat niet hetzelfde als gewoon "find"?
Ik gebruik altijd zoiets, veel inzichtelijker:
for i in `find`; do echo $i; done
En als niet perse sh compatible code hoeft te schrijven $() is veel sneller dan backticks.quote:If no expression is present, -print will be used as the
expression. Otherwise, if the given expression does not con-
tain any of the primaries -exec, -ok or -print, the given
expression will be effectively replaced by:
( given_expression ) -print
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | TOTAL_MEM=0 TOTAL_PROC=0 DIV=$(perl -e 'print "-" x 40') printf "%-10s %-18s %-10s\n" pid name anon_mem echo $DIV pgrep -lf "^ora_j"| sort -k2 | while read pid name junk ; do [ -z "$pid" ] && continue RES=$(pmap -x $pid 2>/dev/null) [ $? -ne 0 ] && continue RES=$(echo -e "$RES" |tail -1 | awk '{NF=NF-1} {print $NF}' ) printf "%-10d %-18s %-10d\n" $pid $name $RES TOTAL_MEM=$(($TOTAL_MEM + $RES)) TOTAL_PROC=$((TOTAL_PROC +1 )) # Just for testing [ $TOTAL_PROC -eq 5 ] && break done TOTAL_MEM_GB=$(echo "scale = 4; ($TOTAL_MEM/1024)/1024"|bc) echo $DIV printf "TOTALS\n%-10s %-18s %-10s" procs "anon_mem kb" "anon_mem Gb" echo $DIV printf "%-10s %-18s %-10s\n" "$TOTAL_PROC" "$TOTAL_MEM" "$TOTAL_MEM_GB" |
1 |
1 2 3 | pid=$(echo $i | cut -d\$ -f1) name=$(echo $i | cut -d\$ -f2) |
Gebruik dan ook geen bash maar zsh ofzo...quote:Op donderdag 10 september 2009 14:20 schreef slacker_nl het volgende:
[ code verwijderd ]
Waarom print ie niet m'n totalen uit??
Als ik
[ code verwijderd ]
naar
[ code verwijderd ]
Werkt het wel... Why??
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |