![]() |
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.
|
|
google unix.com
|
|||||||
| Forums | Registrer | Forum Rules | Lenker | Album | FAQ | Medlemsliste | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| postfunksjonen problem | jwholey | Shell programmering og Skripting | 4 | 05-01-2008 11:21 |
| Script problemet skyldes Rekursiv kataloger Hjelp vennligst | robertmcol | Shell programmering og Skripting | 2 | 04-27-2008 07:00 |
| Funksjon Problem og CoreDump | ZINGARO | Shell programmering og Skripting | 8 | 02-19-2008 06:37 |
| Rekursiv funksjon | bebop1111116 | High Level Programmering | 1 | 10-30-2006 08:12 |
| PERL funksjon problem | avadhani | Shell programmering og Skripting | 2 | 06-15-2005 04:18 |
![]() |
|
|
LinkBack | Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|
|
||||
|
Problemet med Rekursiv funksjon
Hei alle,
Jeg må flytte alle filene i et tre katalogstrukturen til en enkelt katalog. Inorder å vite hvilken fil som katalog, jeg nødt til å legge inn navnet på katalogen til filnavnet. For denne skrev jeg en Rekursiv funksjon som er som følger: --------------------------------------------- datamover () ( cd $ 1 # OLD_DIR \u003d $ 2 for i in * gjøre Hvis [-d $ i] så TMP_DIR \u003d $ i datamover $ TMP_DIR echo $ i ellers mv $ i .. / $ 1_ $ i Hvis [-f $ 1 /] så echo noen filer fortsatt eksisterer ellers cd .. RMDIR $ 1 fi fi ferdig ) -------------------------------------------------- -------------- Når noen jeg kjøre det samme på en katalogstruktur slik DirA -> DirB -> DirL -> fileN -> DirM -> fileO ---> DirC -> DirP -> Filer -> DirQ -> filer programmet er å gi utdatafilen som følger DirA -> DirB -> DirL_fileN -> DirM_fileO ---> DirC -> DirP -> Filer -> DirQ -> filer og feilsøke ouptut som følger -------------------------------------------------- ---- + Echo Dir er DirA Dir er DirA + MAIN_DIR \u003d DirA + Datamover DirA + Cd DirA + '['-D DirB ']' + TMP_DIR \u003d DirB + Datamover DirB + Cd DirB + '['-D DirL ']' + TMP_DIR \u003d DirL + Datamover DirL + Cd DirL + '['-D fileN ']' + Mv fileN .. / DirL_fileN + '['-F DirL / ']' + Cd .. + RMDIR DirL + Echo fileN fileN + '['-D DirM ']' + TMP_DIR \u003d DirM + Datamover DirM + Cd DirM + '['-D fileO ']' + Mv fileO .. / DirM_fileO + '['-F DirM / ']' + Cd .. + RMDIR DirM + Echo fileO fileO + Echo fileO fileO + '['-D DirC ']' + Mv DirC .. / DirA_DirC mv: kan ikke stat `DirC": Ingen slik fil eller katalog + '['-F DirA / ']' + Cd .. + RMDIR DirA RMDIR: `DirA": Ingen slik fil eller katalog -------------------------------------------------- ------------ Kan noen fortelle meg wht er problemet med koden og hvordan du kan løse det? utdataene jeg kreve i dette scenariet vil være så DirA -> DirB_DirL_fileN -> DirB_DirM_fileO -> DirC_DirP_fileR -> DirC_DirQ_fileS Takk på forhånd |
|
||||
|
Sitat:
Den opprinnelige script mislykkes på grunn av for i in * uttalelse Det * er evaluert ved starten av funksjon, og forventer ikke på filer flyttes til den aktuelle katalogen fra en underkatalog. |
|
||||
|
zazzybob løsning er en elegant og enkel løsning.
Grunna rekursjon innen Korn shell funksjon, er det to punkter for å vurdere. Alle variabler, inkludert gjeldende arbeidsmappen er global, med mindre spesifikt definert med funksjonen som da gjør at de lokale innenfor funksjon. Code:
typeset FILENAME=/etc/hosts
Function ()
{
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / resolv.conf Uansett, imidlertid, Code:
typeset FILENAME=/etc/hosts
Function ()
{
typeset FILENAME
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / hosts En rask og skitten måte å gjøre variabler lokale til funksjonen HERUNDER arbeidsgruppen katalogen er å utføre funksjonen i eget skall ved å plassere parentes i funksjon parentes. Funksjonen vil få sin egen kopi av miljøet når ringte og eventuelle endringer, inkludert katalogen til at miljøet ikke vil bli reflektert i den ringer script som er sin egen funksjon. Code:
typeset FILENAME=/etc/hosts
Function ()
{ (
FILENAME=/resolv.conf
echo $FILENAME
) }
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / hosts Sist endret av hegemaro; 02-03-2007 på 10:41.. |
![]() |
| Hugseliste |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|