• In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Visualizzazione risultati da 1 a 15 di 15

Discussione: Approfondimento comandi Bash (Prima Edizione)

Cambio titolo
  1. #1
    Utente Tostapane L'avatar di WarriorXP
    Registrato il
    10-02
    Località
    MI C.le - LE
    Messaggi
    23.429

    Approfondimento comandi Bash (Prima Edizione)

    Qualcuno potrebbe scrivere quei comandi che da shell permettono di operare sull'output di un comando? Faccio un esempio: nella riga "echo Hello" (battuta come comando) voglio che mi sia data la 3^ lettera. Faccio un esempio più normale: dò "ps aux|grep mozilla" e nella stessa riga scrivo questo comando che sto cercando e che mi dia le prima quattro lettere ottenute con il "ps aux|grep mozilla"

    Capitemi, non è facile fare esempi... ^__^...

    Nei linguaggi di programmazione comandi analoghi permettono lo slicing, per esempio.

    IN SINTESI: mi serve sapere i comandi che da shell permettono di operare con le stringhe di output dei comandi. In particolare con la selezione di caratteri indicizzati (per esempio nella stringa di output "abcd" con uno dei comandi che mi potreste dire verrebbero selezionate le lettere 2 e 3 e in realtà mi restituirebbe "bc").

    In bash si possono eseguire delle operazioni con le suddette stringhe?

    (Per Phoenix, Suggerisco un HOWTO per il tuo sito nel quale vengano spiegati i rudimenti della programmazione bash con variabili, cicli ecc...)


    P.S. Ma nonno? E dal 1° che non c'è!

    P.P.S. Prima edizione perchè probabilmente ne seguiranno altre in futuro.

  2. #2
    Contegno, suvvia! L'avatar di Prometeo
    Registrato il
    10-02
    Località
    New York
    Messaggi
    7.890
    Se fate qualcosa ovvimanete lo metto negli how to
    the e.caffeinomane Xperience
    <Drg`uff> rinoa non sono romantico, sono un semi-isolato che fantastica su cose che non potranno mai accadere
    <Drg`uff> ma no
    <Drg`uff> che m3rda isolato
    <Drg`uff> mettici nerd
    <prm\\> drag, siamo in due
    <Ed\\> anche 3 dai

  3. #3
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    In bash si possono eseguire delle operazioni con le suddette stringhe?
    Non credo.(credo( ))

    Con grep penso si possa solo scegliere il numero di righe da stampare, ma non questo tipo di cose, anche perchè non vedo un motivo valido per cui dovresti svolgere quelle operazioni................

  4. #4
    Utente Tostapane L'avatar di WarriorXP
    Registrato il
    10-02
    Località
    MI C.le - LE
    Messaggi
    23.429
    Inviato da Yubei
    Non credo.(credo( ))

    Con grep penso si possa solo scegliere il numero di righe da stampare, ma non questo tipo di cose, anche perchè non vedo un motivo valido per cui dovresti svolgere quelle operazioni................
    Mi ricordo che Nonno tempo addietro scrisse un comando che stampava le lettere alla posizione "x" ed "y" dell'output di un comando

  5. #5
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.311
    il comando che dovrebbe servirti è cut

  6. #6
    Utente Tostapane L'avatar di WarriorXP
    Registrato il
    10-02
    Località
    MI C.le - LE
    Messaggi
    23.429
    e la sintassi del comando cut come è?

  7. #7
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    Inviato da WarriorXP
    e la sintassi del comando cut come è?
    man cut

  8. #8
    Utente Tostapane L'avatar di WarriorXP
    Registrato il
    10-02
    Località
    MI C.le - LE
    Messaggi
    23.429
    Nel frattempo che testo cut qualcuno mi sa dire se è possibile autenticarsi (per esempio root) negli script bash per eseguire comandi come utente root? Questo naturalmente senza lanciare lo script da root...

  9. #9
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.311
    Inviato da WarriorXP
    Nel frattempo che testo cut qualcuno mi sa dire se è possibile autenticarsi (per esempio root) negli script bash per eseguire comandi come utente root? Questo naturalmente senza lanciare lo script da root...
    potersti fare uno script che esegui il comando
    $su
    e mandarli in echo la password

  10. #10
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Inviato da WarriorXP
    Nel frattempo che testo cut qualcuno mi sa dire se è possibile autenticarsi (per esempio root) negli script bash per eseguire comandi come utente root? Questo naturalmente senza lanciare lo script da root...
    Beh con
    $ su -c "comando"

    Lanci "comando" da root, ovviamente ti chiede la password... dopo aver eseguito quel comando (come root appunto) lo script torna automaticamente nello spazio utente, senza che tu debba far nulla per 'sloggarti'.

    Cmq io di Bash non so praticamente un gatsu


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  11. #11
    Utente Tostapane L'avatar di WarriorXP
    Registrato il
    10-02
    Località
    MI C.le - LE
    Messaggi
    23.429
    Inviato da Phoenix
    Cmq io di Bash non so praticamente un gatsu
    Perchè? Non lo usi?? A me sembra qualcosa di abbastanza utile!

  12. #12
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Boh, sinceramente non ne ho mai avuto bisogno, tranne quelle volte che dovevo lanciare più comandi assieme o che volevo creare script più veloci da lanciare per wine il vero motivo comunque è che ho poco tempo da dedicare allo studio 'esterno', sono già abbastanza preso con C++


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  13. #13
    Utente GNU/Linux
    Registrato il
    10-02
    Località
    Roma
    Messaggi
    3.246
    Son tornato!
    Sono occupato con il mondo reale ultimamente, sarò meno presente per un po', temo '|)
    Io amo Bash!
    Ho sempre preferito partire dalle basi, quindi dopo l'Assembler son passato a Bash
    Scherzi a parte, trovo che sia utilissimo nell'uso quotidiano.

    Eccovi una storiella di esempio:
    Ho recentemente deciso d'installarmi Gentoo come sistema principale, ma prima volevo liberargli 20GB (ovviamente dalla partizione di Win ); così ho esaminato /mnt/windows ed ho salvato in un file di testo il nome di ogni file o cartella contenuti (in quel livello, senza entrare in cartelle e sotto-cartelle) preceduto da un carattere di tabulazione e, ad inizio riga, un carattere che indicava cosa farne secondo la legenda: F=fatto; 7=da 7-zippare; L=da lavorare; C=da copiare su CD-R . Mano a mano che esaminavo qualcosa lo aggiungevo nella lista, che pian piano s'ingrandì ed incasinò terribilmente, ma Bash mi salvò:
    $ cat lista.txt|tee >(grep -w 7 > lista7.txt)|tee >(grep -w C > listaC.txt)|grep -w L > listaL.txt
    Ed ecco separati i files per azione da intraprendere (potete ammirare la potenza della sostituzione di processo) (questa riga non è a prova di bomba, nel mio caso ha messo una riga in più in un file)
    Quindi ho prima compresso il comprimibile con 7-Zip, ed aggiunto i nuovi archivi nella lista dei files da spostare su CD, integrata con qualcosa della listaL.
    A questo punto il problema era distribuire i files in modo da utilizzare il minor numero possibile di CDs, e più di 3GB di files avrebbero richiesto un bel po' di tentativi e/o calcoli, ma con 4 righe di bash il problema si risolse "da solo" in pochi secondi.
    Se volete un esempio per aiutarvi ad imparare, eccovi il mio ultimo comando complesso che ho usato (per risolvere il problema alla fine della storiella precedente):
    windows]$ $(IFS=$'\n';n=1;add2CD(){ if test $[$(eval echo '${CD'$n':-0}')+`du -sm "$f"|cut -d $'\t' -f 1`] -le 700 ;then echo "$f" >> CD$n ;export CD$n=$[$(eval echo '${CD'$n':-0}')+`du -sm "$f"|cut -d $'\t' -f 1`];n=1;else n=$[$n+1];add2CD;fi };for f in `du -sm $(grep -v Legenda listaC.txt|cut -d $'\t' -f 2|cut -d $'\r' -f 1) |sort -nr|cut -d $'\t' -f 2`;do add2CD;done;for l in cd?;do echo "$(echo "$l"|tr [:lower:] [:upper:]) <- $(for f in `cat $l`;do MB=$[${MB:-0}+`du -sm "$f"|cut -d $'\t' -f 1`];done;echo "$MB" MB)";cat "$l";echo " - - -";done > ContenutoCDs.txt;unix2dos ContenutoCDs.txt)
    Qui vedete un bel po' di cose, come funzioni ricorsive, vari tipi di sostituzioni, quotature, comandi, etc...
    Lo "script" è composto da due parti, la prima esamina la listaC (contenente l'elenco di files ada mettere su CD), ne ordina i files per dimensione, dopodiché li inserisce in files CDn (dove n è un intero positivo) collocandoli uno per uno nel primo CDn con spazio sufficiente (nel mio caso son CD da 700MB); la seconda parte costruisce un elenco dei files collocati in ogni CD e lo spazio che ne occupano (per verificarne la corretta ripartizione).
    Nel mio caso il ContenutoCDs.txt (il risultato dello "script") viene:
    windows]$ cat ContenutoCDs.txt
    CD1 <- 700 MB
    win98/win98.rar
    ACEd
    RPG Maker 95+.7z
    100olymp
    Xing.7z
    - - -
    CD2 <- 700 MB
    UO itaservers
    WinZip8
    NOMEN.7z
    SS2-Saves.7z
    Saves.7z
    PinoPhotos
    NFS5-Porsche-SaveData.7z
    gnome030421.tar.bz2
    - - -
    CD3 <- 696 MB
    Heroes3-.tar.bz2
    Downloads.tar.bz2
    hmd
    Calabrese
    AquaGatekeeper101Linux.tgz
    - - -
    CD4 <- 686 MB
    C031127.7z
    Aggiornamenti Scaricati
    Bochs
    RARrati
    - - -
    CD5 <- 484 MB
    Programmazione
    Downloads
    NWN - Apocalypse
    NOMEN.exe
    Foto
    Hacking.7z
    ICQ.7z
    - - -
    E come potete vedere nel mio caso ha funzionato alla perfezione
    Per comprenderne i meccanismi, usate i seguenti semplici comandi:
    $ man bash
    $ help help
    $ help
    Buono studio

    P.S.: ho scritto "script" fra virgolette perché, come avrete notato, non ho scritto alcun file, ho inserito i comandi direttamente nella riga di comando; e generalmente quando si parla di script ci si riferisce ad un file
    Ultima modifica di Nonno Cicala; 6-12-2003 alle 03:34:25

  14. #14
    Utente Tostapane L'avatar di WarriorXP
    Registrato il
    10-02
    Località
    MI C.le - LE
    Messaggi
    23.429
    Inviato da Nonno Cicala
    Son tornato!
    Sono occupato con il mondo reale ultimamente, sarò meno presente per un po', temo '|)
    Io amo Bash!
    Ho sempre preferito partire dalle basi, quindi dopo l'Assembler son passato a Bash
    Scherzi a parte, trovo che sia utilissimo nell'uso quotidiano.

    Eccovi una storiella di esempio:
    Se volete un esempio per aiutarvi ad imparare, eccovi il mio ultimo comando complesso che ho usato (per risolvere il problema alla fine della storiella precedente):Qui vedete un bel po' di cose, come funzioni ricorsive, vari tipi di sostituzioni, quotature, comandi, etc...
    Lo "script" è composto da due parti, la prima esamina la listaC (contenente l'elenco di files ada mettere su CD), ne ordina i files per dimensione, dopodiché li inserisce in files CDn (dove n è un intero positivo) collocandoli uno per uno nel primo CDn con spazio sufficiente (nel mio caso son CD da 700MB); la seconda parte costruisce un elenco dei files collocati in ogni CD e lo spazio che ne occupano (per verificarne la corretta ripartizione).
    Nel mio caso il ContenutoCDs.txt (il risultato dello "script") viene:E come potete vedere nel mio caso ha funzionato alla perfezione
    Per comprenderne i meccanismi, usate i seguenti semplici comandi:
    $ man bash
    $ help help
    $ help
    Buono studio

    P.S.: ho scritto "script" fra virgolette perché, come avrete notato, non ho scritto alcun file, ho inserito i comandi direttamente nella riga di comando; e generalmente quando si parla di script ci si riferisce ad un file
    Oltre alla dimostrazione della potenza del bash hai pure risolto il problema con la soluzione dell'output?

  15. #15
    Utente GNU/Linux
    Registrato il
    10-02
    Località
    Roma
    Messaggi
    3.246
    Inviato da WarriorXP
    Oltre alla dimostrazione della potenza del bash hai pure risolto il problema con la soluzione dell'output?
    Non ho capito la domanda
    Se intendi isolare parole in un testo, usa cut ($ man cut ) e grep ($ man grep ).
    grep seleziona le righe
    cut seleziona parole, lettere o campi
    grep|cut seleziona parole, lettere o campi all'interno delle righe selezionate da grep

    Per la questione della password, se vuoi uno script con l'autenticazione automatica (che quindi non chieda la password) puoi usare scripts ibridi bash/expect ($ man expect ), ma tenere la password di root in un file di testo non è il masimo della sicurezza

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •