{"id":136,"date":"2019-10-31T21:14:03","date_gmt":"2019-10-31T20:14:03","guid":{"rendered":"http:\/\/www.forlex.it\/blog\/?p=136"},"modified":"2019-11-01T10:25:29","modified_gmt":"2019-11-01T09:25:29","slug":"mini-guida-per-bash-parte-2","status":"publish","type":"post","link":"http:\/\/www.forlex.it\/index.php\/2019\/10\/31\/mini-guida-per-bash-parte-2\/","title":{"rendered":"Mini guida per BASH &#8211; parte 2 &#8211;"},"content":{"rendered":"\n<p><strong>Estrarre l&#8217;occorrenza di una stringa all&#8217;interno di un testo.<\/strong><\/p>\n\n\n\n<p>Supponiamo che c&#8217;interessi sapere se esiste la stringa &#8220;due&#8221; e poi la stringa &#8220;sei&#8221; all&#8217;interno del file utilizzato nell&#8217;esempio con tail.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; grep -i &#8216;due&#8217; test.txt <\/td><td>&nbsp;\/\/ restituir\u00e0 l&#8217;occorrenza della stringa<\/td><\/tr><tr><td>&nbsp;#&gt; grep -i &#8216;sei&#8217; test.txt&nbsp;&nbsp;<\/td><td>&nbsp;\/\/ restituisce nulla perch\u00e8 la stringa &#8216;sei&#8217; non \u00e8 presente<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Leggere l&#8217;input di un utente&nbsp;<\/strong><\/p>\n\n\n\n<p>Usando il comando read potremo salvare quanto inserito all&#8217;interno di una variabile.<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>#&gt; read -p &#8220;Inserisci input : &#8221; VAR&nbsp;<\/td><td>&nbsp;\/\/ visualizzeremo la striga fra apici doppi come prompt, quello che noi digiteremo verr\u00e0 memorizzato all&#8217;interno della variabile $VAR<\/td><\/tr><tr><td>&nbsp;read -s -p &#8220;Password : &#8221; PASS; printf &#8220;%b&#8221; &#8220;\\n&#8221;<\/td><td>&nbsp;\/\/ visualizza la richiesta di password, quando digitiamo non vedremo i relativi caratteri. Il comando printf \u00e8 stato aggiunto per mandare a capo dopo l&#8217;inserimento.<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Sapere se un comando \u00e8 stato eseguito con successo<\/strong><\/p>\n\n\n\n<p>La bash ci fornisce la variabile $? questa contiene due probabili valori, zero (successo) e non zero. Qundi nel caso di :<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; ls &#8230;\/; echo $?<\/td><td>\/\/ avremo come risultato 2 (ovviamente il comando \u00e8 sbagliato)&nbsp;<\/td><\/tr><tr><td>&nbsp;#&gt; ls ..\/; echo $?&nbsp;<\/td><td>\/\/ avremo come risultato 0, successo.<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Controllare l&#8217;esecuzione di un comando per poterne eseguire altri<\/strong><\/p>\n\n\n\n<p>Quando sorge la necessit\u00e0 di controllare il flusso di esecuzione di comandi nasce l&#8217;esigenza di studiare un costrutto noto del mondo della programmazione : if the else .<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>&nbsp;#&gt; ls; if (( $? == 0)); then echo &#8220;fatto&#8221;; else echo &#8220;errore&#8221;; fi&nbsp;<\/td><td>\/\/ se il comando ls viene eseguito con successo scrivi &#8220;fatto&#8221; altrimenti &#8220;errore&#8221;.&nbsp;&nbsp;&nbsp;<\/td><\/tr><\/tbody><\/table>\n\n\n\n<p><strong>Eseguire pi\u00f9 comandi contemporaneamente.<\/strong><\/p>\n\n\n\n<p>Fin&#8217;ora abbiamo imparato ad eseguire pi\u00f9 comandi in sequenza, grazie al punto e virgola (;). Questo per\u00f2 non ci permette d&#8217;iniziare l&#8217;esecuzione di un comando finch\u00e8 non termina il precedente. Risolviamo con il simbolo di e commerciale (&amp;) che pu\u00f2 essere usata singola nel caso il comando successivo non deve attendere il termine del precedente. Nel caso usassimo la doppia &amp; (&amp;&amp;) vuol dire che il comado successivo attender\u00e0 il termine del precedente. N.B. Quando utilizziamo la &amp; singola, la shell ci comunica l&#8217;identificativo del processo (PID) che \u00e8 stato assegnato al comando prima della &amp; preceduto dal job 1 per il primo comando&nbsp;ecc..<\/p>\n\n\n\n<table class=\"wp-block-table\"><tbody><tr><td>#&gt; ls &amp; sleep 2&nbsp;<\/td><td>\/\/ in questo caso avremo in output il PID&nbsp;e subito dopo l&#8217;output di ls&nbsp;<\/td><\/tr><tr><td>#&gt; ls &amp;&amp; sleep 2<\/td><td>\/\/ in questo caso avremo prima l&#8217;output di ls ed altermine verr\u00e0 eseguito lo sleep di 2 secondi<\/td><\/tr><\/tbody><\/table>\n","protected":false},"excerpt":{"rendered":"<p>Estrarre l&#8217;occorrenza di una stringa all&#8217;interno di un testo. Supponiamo che c&#8217;interessi sapere se esiste la stringa &#8220;due&#8221; e poi la stringa &#8220;sei&#8221; all&#8217;interno del file utilizzato nell&#8217;esempio con tail. &nbsp;#&gt; grep -i &#8216;due&#8217; test.txt &nbsp;\/\/ restituir\u00e0 l&#8217;occorrenza della stringa &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"http:\/\/www.forlex.it\/index.php\/2019\/10\/31\/mini-guida-per-bash-parte-2\/\"> <span class=\"screen-reader-text\">Mini guida per BASH &#8211; parte 2 &#8211;<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1,6],"tags":[],"_links":{"self":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/136"}],"collection":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":1,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":137,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/posts\/136\/revisions\/137"}],"wp:attachment":[{"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.forlex.it\/index.php\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}