Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4

Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4

Meneruskan siri kami mengenai petua dan trik baris perintah bash berguna, dalam artikel hari ini, kami akan meneroka Grepping hanya apa yang anda perlukan, dan bermula dengan primer PWD dan bagaimana untuk menemui jalan skrip bermula dari.

Dalam tutorial ini anda akan belajar:

  • Petua, cara dan kaedah baris perintah bash berguna
  • Cara berinteraksi dengan baris perintah bash dengan cara yang lebih maju
  • Cara Mengasah Kemahiran Bash Anda secara keseluruhan dan menjadi pengguna bash yang lebih mahir
Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran linux-bebas
Perisian Baris perintah bash, sistem berasaskan linux
Yang lain Sebarang utiliti yang tidak termasuk dalam shell bash secara lalai boleh dipasang menggunakan sudo apt-get memasang nama utiliti (atau pemasangan yum untuk sistem berasaskan redhat)
Konvensyen # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa

Contoh 1: Direktori Kerja Laluan? Atau tidak?

Kami mungkin biasa memanggil PWD Di baris arahan untuk memberitahu kami nama direktori semasa kami:

$ pwd/home/roel/ruang kerja 

Tetapi jika kita ingin mendapatkan direktori dari mana skrip dimulakan, menggunakan pembolehubah ini dari skrip juga berfungsi dengan cara yang sama?

$ CAT TEST_PWD.sh #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2" 
Salinan

Kami akan menggunakan dua cara untuk mendapatkan jalan: kami melihat (untuk yang pertama My_path1 tugasan) di PWD (Tahap OS) Pembolehubah Preset secara automatik, dan dalam kes kedua (untuk yang kedua My_path2 tugasan) Kami melaksanakan PWD dalam subshell ($ (...)) dan berikannya ke My_path2. Mari melaksanakannya sama:

$ ./test_pwd.SH/Home/Roel/Workspace/Home/Roel/Workspace 

Nampak baik, betul? Ya, mungkin, tetapi apabila kita berubah menjadi direktori yang berbeza, dan panggil skrip dengan menggunakan nama jalur penuh atau relatif, PWD pemboleh ubah (atau PWD perintah) di dalam skrip akan mengembalikan direktori yang kita ada ketika skrip dimulakan. Mari sahkan ini:

$ mkdir ujian $ ujian cd $ ... /test_pwd.sh/rumah/roel/ruang kerja/ujian/rumah/roel/ruang kerja/ujian 

Apa yang dapat kita lihat di sini ialah PWD (atau $ Pwd pemboleh ubah) akan selalu mengembalikan laluan semasa yang sebenarnya.

Ini mungkin menjadi isu: kita mungkin mahu memulakan subskrip, atau mengakses fail, dari dalam direktori yang sama (atau subdirektori daripadanya) sebagai tempat di mana skrip itu masuk. Ini sering berlaku untuk skrip bash yang lebih kompleks yang memanggil beberapa subskrip dan/atau fail data dan konfigurasi.

Oleh itu, apakah cara seragam untuk mendapatkannya jalan dari mana skrip dimulakan?

Seseorang boleh mempertimbangkan menggunakan Dirname "\ $ 0" Perintah:

$ CAT TEST2.sh #!/bin/bash echo "\ $ 0" dirname "\ $ 0" 
Salinan

Dirname akan menghasilkan - nama direktori relatif dari mana -mana pilihan yang diserahkan kepadanya, dan dalam kes ini \ $ 0 - pemboleh ubah khas yang ditetapkan apabila skrip bermula dengan nama skrip kerana ia dimulakan. Mari mengujinya:

$ ./test2.sh ./test2.sh . $ cd ujian $ ... /test2.sh ... /test2.SH… 

Lebih baik, saya rasa, dan ia boleh membantu sedikit (untuk mendapatkan idea terutamanya), tetapi ia masih tidak menghasilkan kita dengan nama laluan yang berkelayakan sepenuhnya. Untuk ini, kita boleh menggunakan pembungkus subshell berganda di sekitar Dirname dalam kombinasi dengan laluan berkelayakan penuh yang diperoleh dari a PWD Pelaksanaan:

$ CAT Make_it_work.sh #!/bin/bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path" 
Salinan

Mari kita lihat sama ada ia berfungsi:

$ ./make_it_work.SH/Home/Roel/Ruang Kerja 

Setakat ini begitu baik, tetapi adakah ia berfungsi apabila anda menjalankannya dari subdirektori?

$ cd test && pwd/home/roel/workspace/test $ .../make_it_work.sh/home/roel/ruang kerja $/rumah/roel/ruang kerja/make_it_work.SH/Home/Roel/Ruang Kerja 

Ya!

Kami mula -mula berubah menjadi ujian dan mengesahkan bahawa kami berada di ujian Direktori, jika itu perubahan direktori (CD) Perintah berjaya (seperti yang diarahkan oleh &&).

Dalam kedua -dua kes - sama ada ia dipanggil secara relatif (... /), atau dengan nama laluan yang berkelayakan sepenuhnya (/rumah/roel/ruang kerja/), hasilnya ialah kita melihat direktori dari mana skrip dimulakan (/rumah/roel/ruang kerja/) dan bukan direktori kerja semasa sebenar, atau PWD (/rumah/roel/ruang kerja/ujian).

Ringkasnya, anda boleh menggunakan My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" Skrip satu-liner untuk mendapatkan nama direktori yang betul, berkelayakan sepenuhnya dari dalam skrip anda. Selepas ini, menggunakan penambahan relatif akan berfungsi dengan baik. Contohnya, anda boleh menggunakan $ My_path/termasuk/mysubscript.sh Dan bahkan $ My_path /... /one_dir_up_file.txt dan lain-lain.

Contoh 2: Memperkenalkan hanya apa yang anda perlukan

Adakah anda pernah menggunakan grep? GREP adalah utiliti baris perintah bash serba boleh yang membolehkan anda memilih teks dari fail dengan mudah. Kebanyakan masa ia digunakan seperti berikut:

Talian Ujian Cat 1 Line My Line 2 Line Your Line 3 Line kami $ GREP 'LINE 2' Talian 2 baris anda 


Kami mempunyai fail input dengan 3 baris, dan kami mencari ujian tertentu (baris 2) dalam fail itu. Tetapi bagaimana pula jika anda hanya mahukan garis yang mempunyai pelbagai garis (i.e. garis) disebutkan di dalamnya? Dan, bagaimana jika anda hanya mahu mempunyai perkataan sebelum ia termasuk garis sedikit, tetapi bukan yang sebenarnya garis x pengeluaran?

Dalam hal ini, kita dapat hanya untuk apa yang kita perlukan menggunakannya -o ('Hanya') Pilihan untuk Grep:

$ grep -o 'lines' lines $ grep -o '\ w \+ lines' menguji baris anda 

Bingo! Kami mula -mula menyusu hanya perkataan 'garis', yang dijumpai. Kami kemudian mengutamakannya dengan ruang, dan ungkapan biasa yang menyatakan dalam teks pseudo: Cari sempadan perkataan (\ w), sekurang -kurangnya sekali dan banyak kali yang berkenaan (\+) diikuti dengan ruang. Hasilnya ialah anda (yang mempunyai dua sempadan perkataan; permulaan dan akhir) dimasukkan. baris 2 tidak termasuk. Walaupun ia mempunyai sempadan perkataan, tidak ada akhiran garis kepada yang satu.

Sekiranya anda ingin mengetahui lebih lanjut mengenai ungkapan biasa di Bash, sila lihat Bash Regexps untuk pemula dengan contoh, Advanced Bash Regex dengan contoh dan anda juga mungkin menyukai ungkapan biasa Python yang berkaitan dengan contoh.

Kesimpulan

Dalam artikel ini, kami meneroka PWD dan melihat cara menggunakan PWD dari dalam skrip dalam kombinasi dengan Dirname untuk mendapatkan laluan direktori yang berkelayakan sepenuhnya dari mana skrip dimulakan, dengan cara yang akan selalu berfungsi. Kami juga melihat grepping hanya apa yang kita perlukan menggunakan -o pilihan dan, dalam kes ini, ungkapan biasa untuk memadankan sempadan perkataan.

Tinggalkan kami komen dengan petua dan cara baris perintah bash terbaik anda!

  • Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 2
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5

Tutorial Linux Berkaitan:

  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Menguasai Gelung Skrip Bash
  • Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 2
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Gelung bersarang dalam skrip bash
  • Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5
  • Ubuntu 20.04 Panduan