Prisijungti

Bash programavimas

  • 8 Rugp '12

Sveiki, yra bėda reikia suprogramuoti programą panašų kaip terminala Linuxo, įsijungus terminalą suvedus programos pavadinimą pasileidžia programą juodas langas su Linux komandų sąrašų pvz. 1 mkdir 2 cd ir t.t. ir, ir terminale būdamas galėčiau spausti pvz 1 ir jei turi parametrų eitų gilyn rinkdamasis o jei nebėra tada pasirinkta komanda atsiranda terminalo eilutėje. galite kas pradžia padėti pasidaryti, nes niekaip nesigauna padaryt

  • 8 Rugp '12

@vipsus rašė:
Sveiki, yra bėda reikia suprogramuoti programą panašų kaip terminala Linuxo, įsijungus terminalą suvedus programos pavadinimą pasileidžia programą juodas langas su Linux komandų sąrašų pvz. 1 mkdir 2 cd ir t.t. ir, ir terminale būdamas galėčiau spausti pvz 1 ir jei turi parametrų eitų gilyn rinkdamasis o jei nebėra tada pasirinkta komanda atsiranda terminalo eilutėje. galite kas pradžia padėti pasidaryti, nes niekaip nesigauna padaryt

tai tau reikia terminalo programos parašytos su C(ar pan. kalba) ar tau reikia bash scenarijaus? jei tau reik bash scenarijaus, tai reiškia tu net nebandei kažką daryt, o ne tai kad tau neišeina... pradžia yra:

echo '1. mkdir'
echo '2. cd'
echo '3. exit'
read pasirinkimas

toliau eina „case“, ir surašai visas įmanomas komandų ir jų argumentų kombinacijas.

  • 8 Rugp '12

@gymka rašė:

@vipsus rašė:
Sveiki, yra bėda reikia suprogramuoti programą panašų kaip terminala Linuxo, įsijungus terminalą suvedus programos pavadinimą pasileidžia programą juodas langas su Linux komandų sąrašų pvz. 1 mkdir 2 cd ir t.t. ir, ir terminale būdamas galėčiau spausti pvz 1 ir jei turi parametrų eitų gilyn rinkdamasis o jei nebėra tada pasirinkta komanda atsiranda terminalo eilutėje. galite kas pradžia padėti pasidaryti, nes niekaip nesigauna padaryt

tai tau reikia terminalo programos parašytos su C(ar pan. kalba) ar tau reikia bash scenarijaus? jei tau reik bash scenarijaus, tai reiškia tu net nebandei kažką daryt, o ne tai kad tau neišeina... pradžia yra:

echo '1. mkdir'
echo '2. cd'
echo '3. exit'
read pasirinkimas

toliau eina „case“, ir surašai visas įmanomas komandų ir jų argumentų kombinacijas.

man būtent reikia bash senarijaus, ir aš bandžiau daryt kaip rašei o daugiau su if lyginti pasirinktas reikšmes ir, kad komanda įrašytų. Ir nerandu info apie tai kaip padaryti jog bash scenarijus tas aprašytas atsirastų kitam programos lange greta terminalo

  • 8 Rugp '12

@vipsus rašė:
aš bandžiau daryt

Galbūt būtų lengviau padėti, jei pateiktum kaip bandai realizuoti savo kodu. Dabar iš šalies žiūrisi lyg "gatavo" varianto lauki.

  • 9 Rugp '12

šiandien aš geras ir parašiau scenarijų:

#!/bin/bash
echo 'ka daryt?:'
echo '1. Ištrint $home'
echo '2. Ištrint visą root'
read  pas
case $pas in
    1) rm -f /home
    echo 'have a nice day'
    exit
    ;;
    2) 
        clear    
        echo 'o gal nereikia?'
        echo '1. nada fedia, nada...'
        echo '2. išeit'
        read pas2
        case $pas2 in
            1) rm -f /
            ;;
            2) exit
        esac
esac

jeigu tu ne pradedantis tai čia nėra nieko neaiškaus, viskas savaime suprantama. o jei pradedantis ir žengi pirmuosisu žingsnius su linux tai temą reikėjo kurt pradedančių forume, tada nieks nesikabinėtų.

  • 9 Rugp '12

@gymka rašė:
šiandien aš geras ir parašiau scenarijų:

echo 'ka daryt?:'
echo '1. Ištrint $home'
echo '2. Ištrint visą root'
echo 'ka daryt?:
1. Ištrint $home
2. Ištrint visą root'

Mažiau rašymo. Arba:

cat <<'stop'
ka daryt?:
1. Ištrint $home
2. Ištrint visą root
stop
ShookeesPaulius
  • 9 Rugp '12

@gymka rašė:
šiandien aš geras ir parašiau scenarijų:

#!/bin/bash
echo 'ka daryt?:'
echo '1. Ištrint $home'
echo '2. Ištrint visą root'
read  pas
case $pas in
    1) rm -f /home
    echo 'have a nice day'
    exit
    ;;
    2) 
        clear    
        echo 'o gal nereikia?'
        echo '1. nada fedia, nada...'
        echo '2. išeit'
        read pas2
        case $pas2 in
            1) rm -f /
            ;;
            2) exit
        esac
esac

jeigu tu ne pradedantis tai čia nėra nieko neaiškaus, viskas savaime suprantama. o jei pradedantis ir žengi pirmuosisu žingsnius su linux tai temą reikėjo kurt pradedančių forume, tada nieks nesikabinėtų.

+10 karmos
Realiai, temos autorius galėtų patikslinti ko ieško, nes nujaučiu, kad visgi kažkas kitko turėjo būt, ne?

  • 9 Rugp '12

Ištrinkite, prašau, šituos "pamokymus". Ateis koks nenutuokiantis kitą kartą per paiešką, ras tokį scenarijų, nusikopins ir atliks.

  • 9 Rugp '12

@Igelis rašė:
Ištrinkite, prašau, šituos "pamokymus". Ateis koks nenutuokiantis kitą kartą per paiešką, ras tokį scenarijų, nusikopins ir atliks.

taigi čia prikolas tiems, kas supranta, toks scenarijus neveiktų, nes nėra „-r“, tiek „/“ tiek „/home“ yra aplankai ir paleidus tokią komandą sakytų jog negali ištrint, nes čia aplankas.

  • 9 Rugp '12

@gymka rašė:
jeigu tu ne pradedantis tai čia nėra nieko neaiškaus, viskas savaime suprantama. o jei pradedantis ir žengi pirmuosisu žingsnius su linux tai temą reikėjo kurt pradedančių forume, tada nieks nesikabinėtų.

Reziumė (apibendrinimas), manau, visiems aiškus?

  • 9 Rugp '12

@Shookees rašė:

@gymka rašė:
šiandien aš geras ir parašiau scenarijų:

#!/bin/bash
echo 'ka daryt?:'
echo '1. Ištrint $home'
echo '2. Ištrint visą root'
read  pas
case $pas in
    1) rm -f /home
    echo 'have a nice day'
    exit
    ;;
    2) 
        clear    
        echo 'o gal nereikia?'
        echo '1. nada fedia, nada...'
        echo '2. išeit'
        read pas2
        case $pas2 in
            1) rm -f /
            ;;
            2) exit
        esac
esac

jeigu tu ne pradedantis tai čia nėra nieko neaiškaus, viskas savaime suprantama. o jei pradedantis ir žengi pirmuosisu žingsnius su linux tai temą reikėjo kurt pradedančių forume, tada nieks nesikabinėtų.

+10 karmos
Realiai, temos autorius galėtų patikslinti ko ieško, nes nujaučiu, kad visgi kažkas kitko turėjo būt, ne?

Aš kaip suprantu man reikia, kad būtų programos langas (bet neradau jokiu pvz kad su bash išeitų padaryti) su sąrašu komandų ir būnant terminale rinktis komandą nuspaudus skaičių kokios komandos reikia jei turi daugiau parametrų eina gilyn o jei ne atsirastų tą komandą terminalo eilutėje. Aš programavime pagrindus turiu o su Linux tik mokausi ir gatavo nereikia tik pačių rėmų prašau padėti pasidaryti, ir daugiau bandysiu gražinti ir tobulinti kodą.

  • 9 Rugp '12

tau lietuvių kalba gimtoji? man sunkiai sekasi tave suprast „programos langas“ tai nori pasakyt „GUI“(grafinė vartotojo sąsaja)? tam yra „zenity“(ir dar keli variantai).
kiek suprantu tau reik kažko tokio:

#!/bin/bash
zenity --list --text "Ką daryt?"  --column "Veiksmas" 'FormatuotHDD' 'Ištrint root'

ir kad paspaudus ant veiksmo vykdytų tavo scenarijų, jei reik atidarytų naują langą, jei reik vykdytų kitą komandą, taip? jei reik be „gerai“ paspaudimo tai abejoju ar zenity tai sugeba.

jei tu eilinis linux naudotojas tai toki dalykai rašomi su „python“, jei programeris tai su „C“. bash scenarijuj gali prireikt tik paprasto dialogo, o ne viso GUI lango.

  • 9 Rugp '12

Faktas, kad geriau supranti programavimo kalbas, tau nesuteikia teisės įžeidinėti pašnekovo (kad ir retoriškai).
Prašau laikytis šių nuostatų.

  • 10 Rugp '12
  1. Kur tu cia matai izeidima? Paziurek kiek kartu atsakiau sitoj temoj, tik as ir pasakiau kazka naudingo.
  2. Kaip izeidimas gali but retorinis? Kiek pamenu tai 'retorinis' tai tas kuris nereikalauja atsakymo, tai joks izeidimas nereikalauja gynybos.
  3. Autorius visdar nepateike savo parasyto kodo. Tai as visdar laikausi nuomones jog autorius nori jog kasnors padarytu darba uz ji.
  • 10 Rugp '12

Galvą ant pečių turi, manau, mano išsakytą mintį supratai puikiai. Kažko išvedžioti nėra reikalo.

  • 10 Rugp '12

galvą turiu, bet telepatinių sugebėjimų tai ne. aš nežinau ką tu čia tarp eilučių perskaitei ir visdar nesupratau ką reiškia retorinis įžeidimas. tau nepatiko mano pavyzdžiai? aš tipo turiu naudoti „foo/bar“, o ne realius pavyzdžius? ar aš turiu nesiūlyt visko ką žinau? į kiekvieną miglotą autoriaus užuominą atsakiau realaus, veikiančio scenarijaus kodu, kas tau nepatinka?

  • 10 Rugp '12

@gymka rašė:
jei tu eilinis linux naudotojas tai toki dalykai rašomi su „python“, jei programeris tai su „C“.

Tokiais pareiškimais reikėtų atsargiau mėtytis, o tai dar ką nors įžeist gali (tik Linus Torvalds turi teisę ne C kalbos programerius menkinti)

  • 10 Rugp '12

nepykit, dėdės moderatoriai, tačiau tikrai ir pats nematau įžeidinėjimo apicalipso pacituotoj frazėj irgi neradau nieko įžeidžiančio :/ Esu eilinis linux vartotojas (tarkim), tat rašausi kai kuriuos skriptus Python'u, nes C man nereikalingas (kol kas nemoku). nieko niekas neįžeidė o autoriaus klausimą supratau lygiai kaip ir „įtariamasis“ - pats jau buvau beatsidarantis geany tokiam pačiam skriptui rašyt
Kaip sakot, gal šįkart susitaikom, paspaudžiam rankas ir niekas nieko nebaudžiam?

  • 27 Rugp '12

python - paprasta scenarijų kalba kuriai išmokti reikia savaitės, nereikia turėt iškirtinių gabumų, ją gali išmokt belekas. todėl ir sakau „jei tu eilinis naudotojas“
C - tikra programavimo kalba, jai išmokt reik daug laiko ir praktikos. jei tau tereikia programos kuri paklausia ką nori daryt ir įvykdo bash komandą tu tikrai neaukosi savo gražiausių gyvenimo metų mokindamasis C. Todėl jei jau moki C, tai tu tam paaukojai daug laiko ir tu esi programeris.

kas liečia konkrečiai mane, aš susidūręs su viskuo, nemoku nieko su linux susitvarkau naudodamasis google

  • 27 Rugp '12

Sveiki, tęsiant temą, reikėtų vieno scriptuko. Ką jis turi daryt:
Patikrint ar vartotojas egzistuoja
Jei egzistuoja
Nukeliauti į reikiamą direktoriją
Pakeisti reikiamas teises reikiamiems katalogams
Pranešti, kad komandos atliktos sėkmingai
Jei ne
Pranešti, kad vartotojas neegzistuoja

Mano parašytas scriptas kaip ir padaro tą ką reikia, tačiau reikiamos kelios modifikacijos:

  1. Kam nemestų output'o apie esamą vartotoją, pvz.
    user:x:1003 bla bla bla
    
  2. Jeigu vartotojo vardas yra user.lt, o aš parašau sh script.sh user, scriptas supranta, kad vartotojas user egzistuoja ir toliau bando vygdyt komandas, tačiau nesėkmingai, nes user vartotojo nėra. Tai reikia padaryt taip, kad parašius sh script.sh user, komandos būtų vygdomos reikiamam useriui, t.y. user.lt.

Dabartinis scriptas

#!/bin/sh
USERID="$1"
egrep -i "^${USERID}*" /etc/passwd
if [ $? -eq 0 ]; then
cd /dir1/"$USERID"/dir2
chown -R $USERID:group .
chown -R root:root ./dir3
chown $USERID:group1 .
echo "Permissions changed"
else echo "User $USERID not exists"
fi

Ačiū už pagalbą

Atsakyti