Автор Тема: Създаване на sh файл - автоматично използване на команди - как?  (Прочетена 2479 пъти)

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Здравейте,

Искам да попитам, как се създава sh файл в който да бъдат добавени комадни от рода на:

cp -r downloads /data/VMBACKUP


Идеята ми е, да не пиша всеки път една и съща команда за копиране на дадена директория от едно място на друго, как мога да направя така, че да запиша например 10 еднакви команди но за различни директории които да се прехвърлят на едно и също място?

Четох за този sh файл, че се създава от контролния терминал посредством текстов редактор след което се запаметява като .sh

Kакъв е скрипта и как мога да го напиша този sh файл?

Благодаря предварително.

Поздрави!
Активен

AMD

  • Напреднали
  • *****
  • Публикации: 873
  • Distribution: Calculate Linux Scratch 64 / Alt Linux Centaurus 6.0 64
  • Window Manager: Gnome 2.32/3.2 XFCE 4.8/4.10-git
  • AMD Athlon64/Sempron64 4000+Dual Core/3400+
    • Профил
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. echo "Избери файл 1"
  4. read file1
  5. echo "Избери файл 2"
  6. read file2
  7. echo "Избери файл 3"
  8. read file3
  9. echo "Избери файл 4"
  10. read file4
  11. echo "Избери файл 5"
  12. read file5
  13. echo "Избери файл 6"
  14. read file6
  15. echo "Избери файл 7"
  16. read file7
  17. echo "Избери файл 8"
  18. read file8
  19. echo "Избери файл 9"
  20. read file9
  21. echo "Избери файл 10"
  22. read file10
  23.  
  24. echo "Избери директория в която да се копират."
  25. read dir
  26.  
  27. cp -rva $file1 $file2 $file3 $file4 $file5 $file6 $file7 $file8 $file9 $file10 $dir
  28.  

Ако някой има по-добра идея да я каже, но и този вариант работи.
Активен

Господи моля те пази ме от ламерите, от хакерите и сам мога да се пазя.

Филип Бонев

  • Напреднали
  • *****
  • Публикации: 517
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
Здравей,

Просто ще нахвърлям няколко неща :)

За да напишеш скриптов файл не ти трябва нищо специално.

В линукс/уникс разширението не оказва значение дали един файл е изпълним, това става от правата на файла, т.е. дадено разширение не дава права за изпълнение. За да направиш един файл изпълним трябва да изпълниш примерно:
Код
GeSHi (Bash):
  1. chown +x script.sh

В друга тема беше писал за VMWare Server мисля че там единствения редактор беше VI. Малко е сложен за хора които не са го пускали, но ще напиша няколко неща за него.

Отваряне на файл с VI, ако не съществува ще се създаде.
Код
GeSHi (Bash):
  1. vi script.sh

При отваряне на VI не си в режим на редактиране, за да влезеш в такъв ползваш един от следните бутони:
"i" - влизаш в режим редакция
"o" - минаваш на нов ред и влизаш в режим редакция
"a" - преместваш курсора на следващия символ  и влизаш в режим редакция
След като приключиш с редактирането, трябва да запишеш файл. Натискаш ESC за да излезеш от режим за редакция.
Въвеждането на команди става с натискане на ":" и след това командата
:w - записва файла
:q - излизаш от редактора
:!q - излизаш от редактора без да записваш промените
:wq - записваш и излизаш

Все пак може да пробваш дали случайно няма "nano" той е малко по лесен за ползване.

В почти всички линукси има команден интерпретатор sh, ето и как трябва да изглежда един такъв файл:
Код
GeSHi (Bash):
  1. #!/bin/sh
  2. #редовете започващи с # са коментари с изключение на първия, в него се оказва командния интерпретатор
  3. #тук си пишеш командите, примерно:
  4. mount /data/VMBACKUP
  5. cp -r downloads /data/VMBACKUP
  6. co -r neshto /data/VMBACKUP
  7. umount /data/VMBACKUP

Редакция:
Ако ще подаваш параметри може да ползваш $1, $2 и т.н. Това са параметрите подадени на скрипта. При ползване за cp и други команди ти препоръчвам да ги слагаш в кавички примерно:
Код
GeSHi (Bash):
  1. cp -r "$1" "$2"
После извикваш скрипта така
Код
GeSHi (Bash):
  1. script.sh /mainstuff/ /data/VMBACKUP

За повече инфо ти препоръчвам да потърсиш в gооgle за уроци по VI, Bash(скриптов интерпретатор, доста общо с простия sh и на доста дистрибуции sh е връзка към bash).
« Последна редакция: Dec 29, 2011, 13:09 от Филип Бонев »
Активен

Поздрави,
Филип Бонев

ivo_18

  • Напреднали
  • *****
  • Публикации: 64
  • Distribution: Slackware 13.37
    • Профил
Много благодаря за бързите отговори, имам nano editor в операционната система която в open Suse 10.0.

Да, бях пуснал тема за VMware Server, и темата е актуална защото не мога да рестартирам VMware Server-a, преди малко ъпнах темата.

Извинявам се за отклонението, та по същество, ето моя примерен Sh файл, който искам да създам:


Код:
GNU nano 1.3.12                                    New Buffer                                                                    Modified 

#!/bin/sh

#cp -r data/downloads /data/VMBACKUP

#cp -r data/downloads1 /data/VMBACKUP

#cp -r data/downloads12 /data/VMBACKUP

#cp -r data/downloads123 /data/VMBACKUP

#cp -r data/downloads1234 /data/VMBACKUP

#cp -r data/downloads12345 /data/VMBACKUP

#cp -r data/downloads123456 /data/VMBACKUP

#cp -r data/downloads1234567 /data/VMBACKUP

#cp -r data/downloads12345678 /data/VMBACKUP

#cp -r data/downloads123456789 /data/VMBACKUP



^G Get Help            ^O WriteOut            ^R Read File           ^Y Prev Page           ^K Cut Text            ^C Cur Pos
^X Exit                ^J Justify             ^W Where Is            ^V Next Page           ^U UnCut Text          ^T To Spell



Как се завършва файла, има ли нещо с което се приключва преди да се запише?
Трябва ли да има разстояние между командите, както аз съм ги написал с по един ред разстояние, или не трябва?
« Последна редакция: Dec 29, 2011, 13:13 от ivo_18 »
Активен

Филип Бонев

  • Напреднали
  • *****
  • Публикации: 517
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
Махни # пред командите, това както написах оказва че реда е коментар.

Няма нищо специално за край на файл.

Просто Ctrl+O за запис от нано и после Ctrl+X за изход.

Код
GeSHi (Bash):
  1. #!/bin/sh
  2. cp -r data/downloads /data/VMBACKUP
  3. cp -r data/downloads1 /data/VMBACKUP
  4. cp -r data/downloads12 /data/VMBACKUP
  5. cp -r data/downloads123 /data/VMBACKUP
  6. cp -r data/downloads1234 /data/VMBACKUP
  7. cp -r data/downloads12345 /data/VMBACKUP
  8. cp -r data/downloads123456 /data/VMBACKUP
  9. cp -r data/downloads1234567 /data/VMBACKUP
  10. cp -r data/downloads12345678 /data/VMBACKUP
  11. cp -r data/downloads123456789 /data/VMBACKUP
Активен

Поздрави,
Филип Бонев

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
//оff
@AMD ти за цикли не си ли чувал?
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

dejuren

  • Напреднали
  • *****
  • Публикации: 1025
  • Distribution: Ubuntu, RedHat
  • Window Manager: lxde KDE4
    • Профил
Махни # пред командите, това както написах оказва че реда е коментар.

Няма нищо специално за край на файл.

Просто Ctrl+O за запис от нано и после Ctrl+X за изход.

Код
GeSHi (Bash):
  1. #!/bin/sh
  2. cp -r data/downloads /data/VMBACKUP
  3.  
Последно - избягвайте използването на относителен път в скрипт, винаги използвайте пълния:
Код
GeSHi (Bash):
  1. #!/bin/sh
  2. cp -r /full/path_to/data/downloads /data/VMBACKUP
  3.  
Активен

http://webchat.freenode.net/?channels=ubuntu-bg
The quieter you become, the more you are able to hear.
Две седмици цъкане с мишката спестяват два часа четене на документацията.