![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Bash Shell att sh tankskalet i ett Script | saurabh84g | Shell-programmering och Skript | 8 | 08-29-2008 06:51 |
| olika skal csh bash | ajp7701 | Shell-programmering och Skript | 1 | 04-18-2008 05:19 |
| c skal istället för bash | ajp7701 | Shell-programmering och Skript | 0 | 03-18-2008 04:15 |
| Bash Shell | BG_JrAdmin | Linux | 1 | 08-07-2006 02:56 |
| Bash skal ... | VijayHegde | Shell-programmering och Skript | 2 | 06-06-2006 09:09 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
bash shell rörsystem
Hej alla,
Jag är ny på bash. Jag försöker få en sub sträng med en variabel i ett shell script. Vid försöket att göra att jag får följande felmeddelande: -------------------------------------------------- ---------------------- OHOME: / aaa / bbb / produkt / eee . / t.sh: line 6: / aaa / bbb / produkt / eee: Ingen sådan fil eller katalog Oracle Base: -------------------------------------------------- ---------------------- Här är koden: -------------------------------------------------- ---------------------- #! / bin / sh OHOME \u003d / aaa / bbb / produkt / eee echo "OHOME:" $ OHOME O_BASE \u003d echo $ OHOME | awk-F "/" '(for (i \u003d 2; i <\u003d NF; i + +) (if ($ i \u003d\u003d "produkt") (exit;) A \u003d A "/" $ i ;)) ' echo "Oracle Base:" $ O_BASE -------------------------------------------------- ---------------------- Jag är mycket förvånad. Eftersom det inte verkar som "echo $ OHOME" Jag försökte flera saker som omger inom parentes, enkel / citationstecken, etc. jag fortfarande få den här misstag. Jag kan inte hitta syntaxen från boken eller google ![]() Ser väldigt enkelt, men jag fastnat på denna i timmar. Kanske experter Här kan vägleda mig. Här är våra Linux-version: Linux <name> 2.6.9-67.0.20.ELsmp # 1 SMP Mon Jun 18 12:40:47 EDT 2008 i686 i686 i386 GNU/Linux Rocky. |
|
||||
|
Ditt kommando innebär OHOME \u003d echo och när det uppdraget är på plats, kör kommandot $ OHOME vilket naturligtvis inte är ett giltigt kommando. Att fånga utdata från ett kommando, sätta den i baklängescitationstecken (ASCII 96, inte vanliga rakt citattecken): Kod:
O_BASE=`echo $OHOME | awk -F"/" '{for(i=2;i<=NF;i++) {if($i=="product"){exit;} a=a"/"$i; }} '`
$ OHOME lämpligen bör inom citationstecken, veta att nu och du får färre överraskningar senare (även om det i detta fall inte egentligen gör någon skillnad). Om ditt skal tillåter $(...) stället för baklängescitationstecken `...` som kanske är mer lättläst, även om nominellt mindre portabla till arvet Bourne shell. Din awk script verkar inte göra något med en del, om du menar fånga den, måste du skriva ut det. Att skala bort allt efter den första förekomsten av /produkt / Du kan använda skalet är den rörliga ersättningen mekanism: Kod:
O_BASE=${OHOME%/product/*}
(Din awk skript hoppar den första komponenten /aaa, Är det avsiktligt? Du kan ta bort det med en annan variabel substitution, O_BASE \u003d $ (O_BASE # / AAA)) Senast redigerad av era; 08-28-2008 vid 03:56.. Orsak: Varierande substitution kommentarer |
|
||||
|
Ahhh .. Tack så mycket. Jag glömde `s när jag kopierade över från HP. Det fungerar med både `` och $(..)
Er andra förslag "O_BASE \u003d $ (OHOME% / produkt / *)" fungerar perfekt utan alla extra. Jag kan inte förstå att man - behöver få en bra bok att lära sig att syntax. På den tredje delen, hur denna awk verk är, utgår den delen före första snedstrecket som ett fält: "/ aaa / bbb / produkt / EEE". I denna, är aaa det andra fältet per awk och BBB är det tredje fältet. Problemet har lösts. Tack för din hjälp. |
|
||||
|
Citat:
Därför bör du använda snarare $(...) stil om du inte tänker köra skriptet oförändrade under AIX-eller SunOS / Solaris "sh. |
|
|||||
|
den här Referens-kort apendix från Advanced Bash Scripting Guide (http://tldp.org/LDP/abs/html/) Har varit en välsignelse för mig "för jag kan aldrig minnas korrekt syntax för sträng skivning.
|