Terminal komutları için bir script dosyasını nasıl oluşturabilirim?


114

Windows'ta cmd için komutlar içeren bir dosya yazabilirim (genellikle .cmdveya .batdosyalar). Bu dosyalar üzerine tıkladığımda açılacak cmd.exeve onları çalıştıracak komutları içerecektir .

Bunu Ubuntu'da nasıl yapardım?

Bunun bir kopya olduğuna eminim ama cevabımı bulamıyorum.
Bu sorulara benzer, ancak soruya cevap vermiyorlar:

Sık kullanılan terminal komutlarını bir dosyada saklayın

Ubuntu'daki CMD.exe Emulator .cmd / .bat dosyasını çalıştırmak için

Yanıtlar:


150

İki yöntem var.

İlk olarak, en yaygın olanı bir dosya yazmaktır, ilk satırın olduğundan emin olun.

#!/bin/bash

Ardından dosyayı kaydedin. Sonraki çalıştırılabilir kullanarak işaretleyinchmod +x file

Sonra tıkladığınızda (veya dosyayı terminalden çalıştırdığınızda) komutlar yerine getirilecektir. Kurallara göre, bu dosyalar genellikle bir uzantıya sahip değildir .sh;

Birkaç not:

  • İlk satırın dosyayı yorumlaması gereken programın bir yolu olması şartıyla herhangi bir (ve herhangi bir diğeri) Linux'ta yürütülebilir. Yaygın örnekler /bin/python, /bin/sh, /bin/dash, ama daha garip top şeyler gibi çalışmak/bin/mysql
  • Bash tam bir dildir. Windows'ta cmd.exe'den çok daha karmaşıktır. İşlevleri, döngüleri, koşullamaları, dizge işlemlerini vb. Destekleyen güçlü bir programlama dili vardır.
  • Sorun yaşarsanız bu belgeler yardımcı olabilir.
  • Dosyayı çalıştırılabilir yapmak istemezseniz, dosyayı bash argümanı olarak geçirerek çalıştırabilirsiniz: bash file/to/run.sh

Basit Bir Bash Örneği

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

İkinci yöntem ise komutları kaydetmektir script. Koş scriptsonra bir şeyler yap. Yaptığınız şeyler bittiğinde exitve script sizin için yaptığınız tüm "şeyler" ile bir dosya üretecektir. Bu daha az kullanılır ancak makro gibi şeyler yapmak için oldukça iyi çalışır. man scriptdaha fazla bilgi için.


Değişikliği isteyebilirsin /bin/bashiçin /bin/sh, Bash bile Ubuntu için varsayılan değildir.
TC1

@ TC1 Varsayılan olarak kuruludur, dolayısıyla varsayılan olup olmamasının önemi yoktur.
Carlos Campderrós

1
Ben işaret etmek istiyorum /bin/dash(ki /bin/sh, çok daha hızlı bash daha genellikle sembolik olarak edilir) (Ben daha hızlı yaklaşık 15 kat ölçülür). Mümkünse, /bin/dashkabuk scriptleri için kullanın :)
MiJyn

4
Eğer dosya ile aynı klasörde ise ./file.sh
coteyr 'e

1
Her iki yöntemi de denedim, ancak bash komut dosyasını çift tıklatmaya çalışırsam, metin dosyasını geany / gedit'de düzenlemeye hazır olarak açar. Komut dosyasının çift tıklandığında çalıştırılmasını istiyorum. Bu soru ne yapmak istediğim konusunda daha fazla ayrıntı taşıyor.
thymaro

15

Bir kabuk betiği kullanarak bir dosyaya yazmak mı demek istiyorsunuz? İşte birkaç yol:

touch file

Bu yöntem basitçe bir dosya oluşturacaktır, ancak dosya zaten varsa, değişiklik tarihini bu komutu kullandığınız saate değiştirir.

echo "text" > file

Bu yöntem, içeriğini değiştirebilen fileiçin text. Bir dosyayı silmek istiyorsanız, bunu basitçe yapabilirsiniz:

echo "" > file

Bunun için birden fazla satır yazmak istediğinizi ve binlerce echokomut kullanmak istemediğinizi varsa, bu komutu kullanırsınız:

cat << EOF > file
test
test1
foo
bar
EOF

Bu, tek bir komutla birden fazla satır yazmanıza olanak sağlar. O zaman içeriği fileşöyle olurdu:

test
test1
foo
bar

Eğer bir dosyaya eklemek istiyorsa, yerine >göre >>.

Bu yardımcı olur umarım!


DÜZENLEME : Oh, anlıyorum, yani .shuzantısı kullanarak (isteğe bağlı, ancak iyi bir fikir) gedit, dosyayı yazmak ve sonra bir dosya yöneticisi, dosyayı sağ tıklatın, Özellikler-> İzinler ve kontrol Allow executing file as program. Sonra üzerine çift tıklayabilirsiniz ve çalışacaktır :). Ayrıca, bunu terminalde yapmak istiyorsanız, bu komutu çalıştırılabilir yapmak için çalıştırabilirsiniz ( sudoeğer size ait değilse hazırlamak isteyebilirsiniz ):

chmod +x file

Ve koşmak için:

./file

Aslında yapmak istediğim, terminal komutları içeren gedit, bir dosya yazmak. Sonra bu dosyaya çift tıkladığımda bu komutları terminalde çalıştıracak.
Seth

Harika cevap, düşünceli güncelleme. Basitçe bir dosya oluşturmak için, ben her zaman sadece kullandımtouch filename
TryTryAgain

@TryTryAgain, evet, muhtemelen daha hızlı, kolay bir yöntemdir echo "" > file. Cevabımı bu yöntemi eklerseniz olur mu?
MiJyn

@MiJyn Kesinlikle dahil, çekinmeyin. Thanks
TryTryAgain

Global bir komut gibi terminaldeki herhangi bir yerde çalışmasını nasıl sağlayabilirim?
Omer,

14

Windows toplu iş dosyalarına eşdeğer kabuk komut dosyaları ve mükemmel bir başlangıç ​​kılavuzu Bash Scripting .

Çoğunlukla, komut satırına girebileceğiniz komutlar bir kabuk betiğine yerleştirilebilir.

Windows toplu iş dosyalarından farklı olan birkaç şey:

  • Mermi adı verilen farklı komut yorumlayıcıları vardır. Varsayılan değer bash, ancak ilgileniyorsanız, zsh, ksh, dash, perl, python vb. Diğerleri de var.

  • Bir kabuk betiğini çalıştırmak için, dosyayı çalıştırabileceğiniz, çalıştırılabilir hale getirmeniz gerekir. chmod +x <filename>

  • Ubuntu yılında geçerli dizin programı arama yolu değildir, bu nedenle çalıştırmak için gereken ./<filename>değil,<filename>

  • Değişken isimleri $<varname>değil%<varname>%

  • Bir kabuk betiğindeki komutlar, bir toplu iş dosyasındaki gibi varsayılan olarak yazdırılmaz.

  • Dosya adı uzantısı olabilir .shveya (daha geleneksel) bir uzantı kullanmanıza gerek yoktur. Dosyanın ilk satırını koyun #!/bin/bash; Ubuntu'ya dosyayı çalıştırmak için hangi programı kullanacağını söyler.

  • Yorumlar ile başlar #, değil rem.

Umarım bu yardımcı olur ve komut dosyası iyi eğlenceler!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.