Lillebjerka Skrevet 10. november 2004 Del Skrevet 10. november 2004 Hei. Jeg er en fersk bruker av Fedora Core 2. Skal lage et bash-script som heter "finn", som skal sjekke om en fil finnes i en katalog. Det kan startes f.eks. som; finn <fil> <katalog>. Hvis katalogen ikke finnes, returneres beskjed om dette. Hvis katalogen finnes, søkes fila opp, og skriver til skjerm hvor katalog og fil er lagret. Er det noen som har noen forslag til problemet, setter jeg stor pris på det. Takker for svar. Ørjan Lenke til kommentar
burre Skrevet 10. november 2004 Del Skrevet 10. november 2004 (endret) #!/bin/env bash if [ ! -d $1 ]; then echo katalogen $1 finnes ikke else if [ -f $1/$2 ]; then echo filens finnes under $1/$2 else echo katalogen $1 finnes, men ikke filen $2 fi fi Burre Endret 10. november 2004 av burre Lenke til kommentar
Velmont Skrevet 10. november 2004 Del Skrevet 10. november 2004 Eg ville ha lest abs, http://www.tldp.org/LDP/abs/html/ - min ven i nød. Ellers er det eit ganske så enkelt lite bash script, - så det burde ikkje by på nokon problem. Sei ifrå om du treng meir hjelp når du har starta på skriptet! Lenke til kommentar
Velmont Skrevet 10. november 2004 Del Skrevet 10. november 2004 #!/bin/env bash # Kjapp versjon [ -f $1/$2 ] && echo finnes under $1/$2 || echo finnes ikke #litt mer lesbar if [ -f $1/$2 ]; then echo filen finnes under $1/$2 else echo filen finnes ikke fi Burre *mumle* Upedagogisk metode *mumle* Lenke til kommentar
Lillebjerka Skrevet 10. november 2004 Forfatter Del Skrevet 10. november 2004 #!/bin/env bash # Kjapp versjon [ -f $1/$2 ] && echo finnes under $1/$2 || echo finnes ikke #litt mer lesbar if [ -f $1/$2 ]; then echo filen finnes under $1/$2 else echo filen finnes ikke fi Burre *mumle* Upedagogisk metode *mumle* Takker for svar. Kjapp metoden virker veldig bra, med svar om filen ikke finnes. Den andre metoden hadde problemer med å oppgi at filen ikke fantes. Jeg skal også "bake" inn om det skal søkes rekursivt. Skal prøve på det. Hvis noen har tips i den sammenheng også, så er jeg veldig åpen for forslag. Takker. Ørjan Lenke til kommentar
Lillebjerka Skrevet 10. november 2004 Forfatter Del Skrevet 10. november 2004 Hei igjen. Med andre ord:; Hvis jeg vil starte scriptet f.eks. finn [-r] <fil> <katalog> . [-r] betyr at '-r' kan være med, men ikke nødvendigvis. Hvis '-r' (for rekursivt) er med, skal scriptet også sjekke om fila finnes i eventuelle underkataloger til den katalogen som er oppgitt. Hvis '-r' ikke er med, skal bare den aktuelle katalogen sjekkes. Fantastisk hvis noen har løsningen til dette!!! Vanskelig for en nybegynner. Takker igjen. Ørjan Lenke til kommentar
burre Skrevet 10. november 2004 Del Skrevet 10. november 2004 (endret) Oppdaterte kodesnuttet til å begynne med slik at den virker slik som du vil ha den. Dersom du skal parse rekursivt så tror jeg at det kan lønne seg med kommandoen find. Alle kommandoer slutter med en exit kode, som er $? 0 er ok utført. Denne kodebiten finner duplikater, f.eks foo1/fil og foo2/fil #!/bin/env bash export IFS='' filen=$(find $1 -type f -iname $2 2> /dev/null) if [ $? == 1 ]; then echo Fant ikke katalog $1. prøv . for søk i denne katalogen. exit 1 fi if [ -n $filen ]; then export IFS=' ' echo "fant filen(e) :" for i in $filen; do echo $i done fi Liten advarsel, er ikke sikker på 'korrekt' bruk av IFS. Aaaarg, du skulle ha med -r for rekursivt ja, skal se på om bash har noen opsjonsparser eller om jeg må skrive noe selv. Føler meg tryggere i python en bash for tiden Burre Endret 10. november 2004 av burre Lenke til kommentar
runesk Skrevet 10. november 2004 Del Skrevet 10. november 2004 #!/bin/bash if getopts r opts; then case $opts in r) r=true;; esac fi if [ ! -z $r ]; then shift DIRS=$(find $2 -type d) else DIRS=$2 fi for DIR in $DIRS do DIR=$(dirname $DIR) if [ -f "${DIR}/$1" ]; then echo "${DIR}/$1" FUNNET=true fi done if [ -z $FUNNET ]; then echo "Den fordømte fila finnes ikke" exit 1 fi exit 0 Forholdsvis selvforklarende løsning på et i utgangspunktet teit problem Lenke til kommentar
burre Skrevet 10. november 2004 Del Skrevet 10. november 2004 hm, litt bedre måte ja. Bøye seg litt i støvet. Lenke til kommentar
runesk Skrevet 10. november 2004 Del Skrevet 10. november 2004 (endret) Hum.. litt kaffe og en røyk, så fikk jeg ånden over meg og implementerte find som en rekursiv funksjon i sh i stede. Dermed er man ikke avhengig av noe annet en et Bourne shell (funker i ash, dash og bash iallefall) og en core-pakke (coreutils på Debian GNU/Linux) !/bin/sh find() { if [ ! -d "$1" ]; then return fi for FILE in ${1}/*; do if [ -d "$FILE" ]; then echo $FILE; find "$FILE" fi done } if getopts r opts; then case $opts in r) r=true;; esac fi if [ ! -z $r ]; then shift DIRS=$(find "$2") else DIRS=$2 fi for DIR in $DIRS do if [ -f "${DIR}/$1" ]; then echo "${DIR}/$1" FUNNET=true fi done if [ -z $FUNNET ]; then echo "Den fordømte fila finnes ikke" exit 1 fi exit 0 *puh* da er det bare å ta helg :-) Endret 10. november 2004 av runesk Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå