Як створити файл сценарію для термінальних команд?


114

У Windows я можу написати файл, що містить команди для cmd (як правило, .cmdабо .batфайли). Коли я натискаю на ці файли, він відкриється cmd.exeі запускає їх команди, які містить файл.

Як би я це зробив в Ubuntu?

Я впевнений, що це дублікат, але я не можу знайти свою відповідь.
Він подібний до цих питань, але вони не відповідають на питання:

Зберігайте часто використовувані термінальні команди у файлі

Емулятор CMD.exe в Ubuntu для запуску .cmd / .bat файлу

Відповіді:


150

Існує два методи.

По-перше, найпоширеніше - це написати файл, переконайтеся, що це перший рядок

#!/bin/bash

Потім збережіть файл. Далі позначте його виконуваним за допомогоюchmod +x file

Потім при натисканні (або запуску файлу з терміналу) команди виконуються. За умовами, ці файли зазвичай не мають розширення, проте ви можете змусити їх закінчити .shчи будь-яким іншим способом.

Кілька приміток:

  • Будь-який (і я маю на увазі будь-який) файл може бути виконаний в Linux за умови, що перший рядок - це шлях до програми, яка повинна інтерпретувати файл. Типові приклади включають /bin/python, /bin/sh, /bin/dash, але навіть непарні кулі працюють речі , як/bin/mysql
  • Баш - повна мова. Це набагато складніше, ніж cmd.exe у Windows. Він має потужну мову програмування, яка підтримує функції, цикли, умовні умови, рядкові операції тощо.
  • Ці документи можуть допомогти, якщо у вас виникнуть проблеми.
  • Якщо ви не хочете зробити файл виконуваним, тоді ви можете запустити його, передавши його як аргумент bash: bash file/to/run.sh

Простий приклад Баша

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

Другий метод - запис команд за допомогою script. Запустіть scriptпотім просто займіться. Коли ви закінчите робити тип матеріалу exitта сценарій, він генерує файл для вас із усіма "матеріалами", які ви зробили. Це менше використовується, але працює досить добре для виготовлення таких речей, як макроси. man scriptдля отримання додаткової інформації.


Ви можете змінити це /bin/bashна /bin/sh, bash навіть не є типовим для Ubuntu.
TC1

@ TC1 Він встановлений за замовчуванням, тому не має значення, за замовчуванням чи ні.
Карлос Кампдеррос

1
Я хотів би зазначити, що /bin/dash( /bin/shяк правило, це посилання) набагато швидше, ніж баш (я вимірював приблизно в 15 разів швидше). Якщо це взагалі можливо, використовуйте /bin/dashдля скриптів оболонки :)
MiJyn

4
Якщо ви знаходитесь у тій самій папці, що і файл, переконайтеся, що ./file.sh
coteyr

1
Я спробував обидва способи, але якщо я спробую двічі клацнути файл скрипту bash, він просто відкриє текстовий файл у geany / gedit, готовий до редагування. Я хотів би, щоб сценарій виконувався після подвійного клацання. Це питання містить детальніше, що я хочу зробити.
тимаро

15

Ви маєте на увазі запис у файл за допомогою сценарію оболонки? Ось декілька способів:

touch file

Цей метод просто створить файл, але якщо файл вже існує, він просто змінює дату модифікації на час, коли ви використовували цю команду.

echo "text" > file

Цей метод перезаписує вміст fileдо text. Якщо ви хочете очистити файл, ви можете просто зробити це:

echo "" > file

Скажіть, що ви хочете написати до нього більше одного рядка, і ви не хочете використовувати тисячі echoкоманд, ви б використовували цю команду:

cat << EOF > file
test
test1
foo
bar
EOF

Це дозволяє вам записати кілька рядків в одну команду. Зміст fileцього буде таким:

test
test1
foo
bar

Якщо ви хочете додати файл, замініть >на >>.

Сподіваюся, це допомагає!


EDIT : О, я бачу, так що ви б записали файл у gedit, використовуючи .shрозширення (необов'язково, але це гарна ідея), а потім у файловому менеджері клацніть правою кнопкою миші на файл, виберіть Властивості-> Дозволи та перевірте Allow executing file as program. Потім ви можете двічі клацнути по ньому, і він запуститься :). Крім того, якщо ви хочете зробити це в терміналі, ви можете запустити цю команду, щоб зробити її виконуваною (можливо, ви хочете зробити попередній запис, sudoякщо вона не належить вам):

chmod +x file

І бігти:

./file

Насправді те, що я хочу зробити, це написати файл, скажімо, gedit, який містить термінальні команди. Потім, коли я двічі клацну цей файл, він запустить ці команди в терміналі.
Сет

Чудова відповідь, уважне оновлення. Щоб просто створити файл, я завжди використовувавtouch filename
TryTryAgain

@TryTryAgain, так, це простий метод, ймовірно, швидше, ніж echo "" > file. Чи добре, якщо я включу цей метод у свою відповідь?
MiJyn

@MiJyn Абсолютно включіть це, не соромтеся. Спасибі
TryTryAgain

Як я можу змусити його запускати будь-де в терміналі ... як глобальна команда?
Омер

14

Еквівалент пакетних файлів Windows - це сценарії оболонки, і чудовим керівництвом для початку є Bash Scripting .

Здебільшого команди, які можна ввести в командному рядку, можуть бути розміщені в сценарії оболонки.

Кілька речей, які відрізняються від пакетних файлів Windows:

  • Існують різні інтерпретатори команд, які називаються оболонками. За замовчуванням - bash, але якщо вам цікаво, є й інші, такі як zsh, ksh, dash, perl, python тощо.

  • Щоб запустити скрипт оболонки, потрібно зробити файл виконуваним, з чим ви можете зробити chmod +x <filename>

  • В Ubuntu поточний каталог не є шлях пошуку програми, тому вам потрібно запустити ./<filename>, не<filename>

  • Імена змінних є $<varname>, ні%<varname>%

  • Команди в скрипті оболонки не друкуються за замовчуванням, як у пакетному файлі.

  • Розширення імені файлу може бути .shабо (більш звичним), вам не потрібно використовувати розширення. Поставте #!/bin/bashв перший рядок файлу , який повідомляє Ubuntu, яку програму використовувати для запуску файлу.

  • Коментарі починаються з #, ні rem.

Сподіваємось, це допомагає та отримує задоволення від сценаріїв!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.